从类更改VB.net表单上的文本框内容

时间:2013-04-16 22:14:39

标签: vb.net winforms

这似乎是一个微不足道的问题,但我无法让它发挥作用并且花了最后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组成。正确读取按钮的值,但无法设置文本框内容。

提前致谢

1 个答案:

答案 0 :(得分: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