0

这似乎是一个微不足道的问题,但我无法让它工作,并且在过去的 30 分钟里一直在兜圈子:-(

我有一个带有文本框的表单和一个位于单独类中的对象处理程序。我想用对象处理程序的输出更新文本框的内容。

我正在尝试以这种方式访问​​它:

formName.textBoxName.Text = value

但什么也没发生。但是,我可以读取同一表单上按钮的状态,所以我很困惑。看来我可以从我的班级访问一些表单控件但只能读取?

我知道我正在从我的班级获得输出,因为我可以在调试窗口中查看它。

我试过更改文本框的修饰符属性,没有任何区别——我确信这是我犯的一个愚蠢的错误,但我就是看不到它。

如何从另一个类更改我的 textBox 值?

这是我的代码:

类:Summarizer.vb

If frm_Settings.btn_NextSection.Enabled = True Then
    Console.WriteLine("Boo!")
    frm_Settings.txt_NextSection.Text = "Boo!"
End If

形式:frm_Settings 由(除其他外)一个文本框 txt_NextSection 和一个按钮 btn_NextSection 组成。按钮的值被正确读取,但无法设置文本框内容。

提前致谢

4

1 回答 1

1

我会尽力给出答案,但很多事情还不清楚。
在执行您的代码时frm_Settings可能会声明并初始化该类的一个实例Summarizer
在这一点上,传递给类的构造函数,对当前实例的引用frm_Settings

....
Dim sz = new Summarizer(Me)
sz.ExecuteSomeMethod()
.....

Summarizer现在,以这种方式为类添加一个构造函数

Public Class Summarizer

   ' This is the local reference to the frm_Setting instance passed in the constructor'
   Dim callerInstance As frm_Settings

   ' This constructor receives the instance of the frm_Settings class 
   'that has created the instance of Summarizer'
   Public Sub New(ByVal caller As frm_Settings)
       ' Set the local reference to the instance passed in'
       callerInstance = caller
   End Sub 

   .....

End Class

现在,在需要更新文本框的处理程序中,可以将代码更改为

' Use the instance of the frm_Settings that has created the instance of this class'
If callerInstance.btn_NextSection.Enabled = True Then
    Console.WriteLine("Boo!")
    callerInstance.txt_NextSection.Text = "Boo!"
End If
于 2013-04-16T23:11:41.740 回答