我创建了一个简单的C#dll,它将由VB6应用程序调用。它只是以模态方式打开一个表单,没有别的。 ShowInTaskbar设置为false。
namespace ComTest{
[ComVisible(true)]
[Guid("0A62D0AC-F396-4089-ADF0-330B356E2559")]
[ClassInterface(ClassInterfaceType.None)]
public class Test
{
private frmTest frm = null;
[STAThread]
public void ShowForm()
{
frm = new frmTest();
frm.ShowDialog();
//...
}
}
}
表单上有一个按钮,用于显示“点击按钮”消息框。
VB6应用程序只是一个表单(ShowInTaskbar设置为true),也带有一个按钮。单击它会显示C#窗口。按“Esc”会根据按下的键显示一个消息框。
Private Sub Command1_Click()
Dim test As Object
Set test = CreateObject("ComTest.Test")
If Not test Is Nothing Then
test.ShowForm
End If
Set test = Nothing
End Sub
一旦应用程序启动(这只在启动项目exe时发生,而不是在调试时!)并且按下按钮以打开C#对话框,我选择应用程序的任务栏图标。 VB6窗口正在被聚焦(为什么?)并且按下“Escape”会打开另一个C#对话框(虽然第一个仍然可见),就好像按钮再次被点击一样。
表单上没有默认按钮;当没有打开对话框时,按“Escape”会弹出正确的消息框。
此行为可以无限期重复。我试过设置父母和孩子,这种互操作应用的常见答案是使用Interop Form Toolkit。
仍然我不明白为什么按“Escape”会触发按钮点击的事件。有谁知道为什么?
提前致谢