当VB6应用程序打开C#模式窗口时,KeyPress触发单击事件

时间:2011-11-16 10:40:18

标签: c# events interop modal-dialog vb6-migration

我创建了一个简单的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”会触发按钮点击的事件。有谁知道为什么?

提前致谢

0 个答案:

没有答案