首页 > 解决方案 > VBnet:从类中引用表单对象

问题描述

计划

我确定这个问题一定已经在某个地方得到了回答,因为它非常基本,但不幸的是我还没有找到答案......

我的计划是创建一个简单的日志函数,它使用 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 并传递给 log 类:

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

标签: vb.netformsclass

解决方案


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

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


推荐阅读