VBnet:引用类中的表单对象

时间:2018-09-06 14:48:20

标签: vb.net forms class

计划

我肯定一定在某个地方回答过这个问题,因为它很基本,但是很遗憾,我还没有找到答案...

我的计划是创建一个简单的日志函数,该函数使用RichTextField作为输出并实现诸如Add,AddLine,RemoveLine,ReplaceLine等功能。

什么不起作用

每当我尝试从日志类中访问RichTextBox对象时,都会收到“无”的异常。

我的方法

想法是将对RichTextBox的引用存储在自己的类中,该引用是在创建新的类实例时传递的:

Public Class Log
    Dim _logBox As RichTextBox

    Public Sub New(ByRef logBox As RichTextBox)
        _logBox = logBox
    End Sub

    Public Sub AddLine(ByVal text As String)
        Me.Add(text)
        _logBox.AppendText(Environment.NewLine)
    End Sub
End Class

在我的Form类中,在启动时创建了RichTextBox并将其传递给日志类:

Public Class Form1
    Dim log As New Log(RtbxLog) ' RtbxLog: RichTextBox object created on form

    [on some button click event]
      log.AddLine("entry with new line")  ' THIS CAUSES "nothing" EXCEPTION
End Class

1 个答案:

答案 0 :(得分:2)

RtbxLog不会被初始化,直到调用New。这通常在InitializeComponent()期间完成。我建议您在调用InitializeComponent之后(在新版本中)创建日志。

另外,我是否建议您创建自己的控件(继承自RichTextBox)。或者另一个选择是您的日志类仅存储信息,而表单负责在文本框中显示该信息。