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