KeyPress запускает событие нажатия, когда модальное окно C # открывается приложением VB6 - PullRequest
2 голосов
/ 16 ноября 2011

Я создал простой 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» вызывает кнопкусобытие кликнуло.У кого-нибудь есть идеи почему?

Заранее спасибо

...