我有以下问题:
我有2个窗口形式(" Main"和" Form2")和分离的类" PI"。
使用面板,我显示" Form2"在里面"主要"。
代码来自" Main" :
Dim frm As new Form2 = Form2()
panel1.Controls.Add(frm)
frm.Show()
工作正常。点击" Form2"该程序进入PI类进行一些计算,这也可以,但是当PI类的所有计算完成后,我需要将结果传递给" Form2"使用以下代码(test只是字符串公共变量)。 代码来自" PI":
Public Shared Sub Test
Form2.test = "It works!"
end sub
代码来自" Form2":
Public test As String
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
PI.Test()
MsgBox(test)
End Sub
所以,问题是如果没有面板,如果我独立打开Form2(不在#34; Main"内部),以这种方式传递变量效果很好(msgbox显示语句),否则 - 它不会#& t(empy box)。你能告诉我出了什么问题吗?我该怎么办呢?
提前致谢!
答案 0 :(得分:0)
像这样构建代码将PI和Form2结合在一起 - 他们彼此了解太多。通常我们更喜欢PI这样的类独立于使用它们的UI代码 - 它使它们更易于使用,重用和调试。
我不知道Test方法的结果是什么(在你的例子中它只是一个字符串),但是你应该让它让Test方法返回它,然后Form2可以使用它
如果结果更复杂(可能是几个值),您可以创建一个包含结果值的类,并从Test返回该类的实例。或者,您可以在PI实例上设置多个属性,并在调用Test后更改Form2代码以从这些属性中获取值。 (这并不像返回值那样好,但它可能更简单,并且比直接在Form2上设置PI结果要好得多。)
答案 1 :(得分:0)
为什么它适用于独立的 Form2 :
在
Public Shared Sub Test()
Form2.test = "It works!"
End Sub
您始终在处理 Form2 的默认实例。如果您描述为“按预期工作”,那么您只需将其称为独立的。
但是在你的代码中
Dim frm As new Form2 = Form2()
panel1.Controls.Add(frm)
frm.Show()
您正在创建 Form2 的新(另一个)实例。
在那里使用原始默认实例(如果您只需要一个 Form2 ),即不要使用new
,它将开始工作。
panel1.Controls.Add(Form2)