我有一个表单(叫它1),它会打开一个新表单(2),您可以在其中从datagridview中选择一个客户端。当用户单击表单(2)中的接受时,我创建一个对象并将其传递给表单(1)。这是来自接受按钮的代码,格式为(2):
Private objCreateOrder As FCreateOrder = New FCreateOrder
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
If selectedRow Is Nothing Then
MessageBox.Show("Error.")
Else
Me.Close()
objCreateOrder.getClientObject(objClient)
End If
End Sub
这是上面调用的形式(1)中的函数:
Public Sub getClientObject(client As CClient)
Dim objClient As CClient = New CClient
objClient = client
txtClient.Text = objClient._name.ToString + " " + objClient._surname.ToString
End Sub
当我调试时,我看到该对象已正确传递,并且文本框具有所需的字符串。另外,如果我添加诸如MessageBox.Show()之类的内容以显示任何内容只是为了检查代码是否运行了它所起作用的方法内的内容,则但是文本框不显示任何内容。我想念什么?
当前代码创建FCreateOrder的实例(及其控件),然后使用该实例设置txtClient的值。但是,这个新实例不是通过客户选择调用表单的实例。该实例需要使用选定的文本进行更新。
您可以在表单内部传递正确的实例,并在创建客户端表单的确切位置选择客户端。
....
Dim formClient as FClientSelection = new FClientSelection(Me)
formClient.ShowDialog()
...
实例Me被传递给FClientSelection构造函数,您可以将其保存在本地变量中
Dim currentOrder as FCreateOrder
Public Sub FClientSelect(fOrder As FCreateOrder)
currentOrder = fOrder
End Sub
最后,您使用currentOrder调用用于修复客户文本的方法
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
If selectedRow Is Nothing Then
MessageBox.Show("Error.")
Else
Me.Close()
currentOrder.getClientObject(objClient)
End If
End Sub
说我想让您现在考虑如何将这两个表单类紧密地联系在一起。这不是一个好的设计。最好在formClient内部使用公共属性,并在关闭表单之前在表单内部设置该属性。您的调用表单可以读取该属性并执行其工作。