Vb.net 多次使用表单,其中调用另一个表单子例程
这个问题的标题有点难以表达,但我会在这里更清楚地解释 我有一个订单表单和3个不同的佣金率表单,每个表单都有一个按钮,用于打开客户搜索表单、供应商搜索表单和产品搜索表单 我们以从订单(Vb.net 多次使用表单,其中调用另一个表单子例程,vb.net,forms,parameters,Vb.net,Forms,Parameters,这个问题的标题有点难以表达,但我会在这里更清楚地解释 我有一个订单表单和3个不同的佣金率表单,每个表单都有一个按钮,用于打开客户搜索表单、供应商搜索表单和产品搜索表单 我们以从订单(frmOrder)打开的客户搜索表单(frmCustomerSearch)为例 我创建了一个表单,用于加载所有客户的列表,用户可以在列表中找到客户,或者搜索他们的姓名、代码或按类别搜索 结果显示在Infragistics套件的UltraWinGrid中 双击一行选择该客户时,frmCustomerSearch关闭,并
frmOrder
)打开的客户搜索表单(frmCustomerSearch
)为例
我创建了一个表单,用于加载所有客户的列表,用户可以在列表中找到客户,或者搜索他们的姓名、代码或按类别搜索
结果显示在Infragistics
套件的UltraWinGrid
中
双击一行选择该客户时,frmCustomerSearch
关闭,并调用frmOrder.addCustomerFromSearch
,将所选客户代码传递到子例程中,然后frmOrder
将使用该代码填充客户信息
这没有问题,但是,我需要从3个佣金率屏幕打开相同的frmCustomerSearch
窗口,以便用户再次选择要添加到佣金率中的客户
我不想为每个窗口创建一个新的客户、供应商和产品搜索表单,但我正在努力解决如何为每个窗口使用相同的表单
目前,我已将Dim fOrder作为frmOrder排在班上的首位,其次是:
Public Sub New(ByVal conn As OleDb.OleDbConnection, ByVal orderform As frmOrder)
Try
fOrder = orderform
con = conn
InitializeComponent()
Catch ex As Exception
errorLog(ex)
End Try
End Sub
因此,frmOrder
作为orderform
参数传入,这意味着我可以在双击客户时使用以下代码填充订单中的客户详细信息
If fOrder.IsHandleCreated = True Then
fOrder.addCustomerFromSearch(cCode)
Else
MsgBox("Order screen is no longer open, unable to add customer.", MsgBoxStyle.OkOnly, "Error")
End If
如何更改此代码以使我能够以不同的形式作为参数传递,然后调用该表单上的子例程来填充客户
我尝试将其更改为Dim f As Form
,然后在Public Sub New
中再次使用ByVal frm As Form
,但无法调用该表单的子例程,因为它不知道在中查找f.addCustomerFromSearch
的表单
这可能吗?希望这是有道理的,不过解释起来有点混乱,所以道歉。您可以使用:
反射提供描述程序集、模块和类型的对象(类型)。可以使用反射动态创建类型实例、将类型绑定到现有对象、从现有对象获取类型并调用其方法或访问其字段和属性。如果您在代码中使用属性,反射使您能够访问它们。有关详细信息,请参阅
我要做的是将Private\u表单声明为顶部的表单
。然后,我将为新的方法创建如下内容:
Public Sub New(ByVal conn As OleDb.OleDbConnection, ByVal orderform As frmOrder)
Try
_form = orderform
con = conn
InitializeComponent()
Catch ex As Exception
errorLog(ex)
End Try
End Sub
Public Sub New(ByVal conn As OleDb.OleDbConnection, ByVal customersearchform As frmCustomerSearch)
Try
_form = customersearchform
con = conn
InitializeComponent()
Catch ex As Exception
errorLog(ex)
End Try
End Sub
现在我们有了\u表单
,我们可以看看反射:
Dim dynMethod As Reflection.MethodInfo = _form.[GetType]().GetMethod("addCustomerFromSearch")
If dynMethod IsNot Nothing Then
Dim parameters() As Object = {cCode}
dynMethod.Invoke(_form, parameters)
End If
这是假设您的addCustomerFromSearch
方法如下所示:
Public Sub addCustomerFromSearch(ByVal code As String)
End Sub