在做一个VB软件升级的项目,要求将其中一部分功能替换为C#,并且保存目前还在使用的VB旧功能,这样就需要在C#代码里调用VB窗体,并处理它返回的结果。对VB一窍不通,都不知道怎么入手,还是把之前C#里面的老套路加进去,通过传递参数向窗体传值,使用事件的处理窗体返回的结果。折腾了老久总算是理解,搞明白怎么调用了。顺手贴进去,以备忘掉。
<!-- lang: vb -->
Public Class VBFormCall
'定义事件
Public Event CompletedEvent(ByVal value As Object)
'调用指定的窗体
Public Function CreateEvent(ByVal naemFrm As String, ByVal frmParam As System.Object)
On Error Resume Next
'可以正常接受并处理传递来的参数
Dim myValue = frmParam
Dim objFrm = New VBasicForm.Form1
objFrm.TextDisplay(myValue)
objFrm.ShowDialog()
'激活事件
RaiseEvent CompletedEvent(objFrm.strReturnVal)
End Function
End Class
项目组成的结构可能是这样的
然后就可以在C#代码里直接调用了
<!-- lang: c# -->
private void button2_Click(object sender, EventArgs e)
{
FrmCallerLib.VBFormCall caller = new FrmCallerLib.VBFormCall();
// 传递委托处理返回的值
caller.CompletedEvent += new FrmCallerLib.VBFormCall.CompletedEventEventHandler(caller_CompletedEvent);
caller.CreateEvent(null,"最爱李笑阁");
}
/// <summary>
/// 返回的处理事件
/// </summary>
/// <param name="value"></param>
public void caller_CompletedEvent(object value)
{
if (value != null)
MessageBox.Show(value.ToString());
}