2013-03-15 1 views
1

Я использую VB.NET в Visual   Studio   2010 таргетинг на .NET Framework 3.5.Ключ Escape закрывает форму Windows Forms без привязки к ней кода или настроек

В нашем (довольно большом) клиентском приложении есть одна форма (Windows Forms), с которой у нас возникла проблема. Он отображается с .ShowDialog (это не единственная форма, отображаемая с .ShowDialog). В форме есть кнопки «Закрыть» и «Отмена», а клавиши «Ввод» и «Выйти» соответственно привязаны к этим элементам управления (и это также делается для других форм). Код в кнопках выполняет вызов метода «Скрыть», чтобы сделать форму невидимой (она фактически выгружается позже в логике бизнес-процесса), и снова мы делаем это в другом месте с другими формами.

Нажатие кнопок «Закрыть» или «Отмена» работает по желанию. Нажатие кнопки Введите ключ также работает по желанию (Close click is run). Но когда нажата клавиша Escape, сначала запускается логика кнопки «Отмена», как и ожидалось, но затем мы получаем событие «Закрытое событие», и форма выгружается!

Нет кода в другом месте, который ищет ключ Escape и выполняет закрытие формы. Мы попытались установить аргумент Cancel в событии закрытия, но безрезультатно - форма все еще выгружается. Мы также отключили клавишу Escape от кнопки «Отмена», нажав Escape, а затем не запустив код «Отмена» (как и ожидалось), но событие «Закрытие формы» все еще срабатывает.

Я не смог воспроизвести это поведение в тестовой программе, поэтому, к сожалению, я не могу опубликовать рабочий (нерабочий, фактически) пример кода.

Любые данные о том, что происходит? Почему клавиша Escape закрывает форму?

Возможно, самое важное, что мне нужно сделать, чтобы исследовать это дальше и понять это?

+2

Предполагаете, что у вас есть свойство CancelButton в форме, установленной на кнопку «Отмена». – Steve

+0

Код поможет. Покажите нам код, который создает и показывает форму, а также любой другой код, который взаимодействует с объектом формы. –

ответ

3

Первый подозреваемый - CancelButton формы. Также проверьте кнопку отмены DialogResult.

Если вы установите CancelButton формы на кнопку, нажав клавишуEsc вызывает Click событие кнопки, устанавливает DialogResult к Cancel и закрывает форму формы. Также, когда вы устанавливаете свойство DialogResult кнопки на что-либо, кроме None, нажатие кнопки закроет форму. От MSDN:

Если DialogResult для этого свойства установлено значение, отличное от None, и если родительская форма была показана с помощью метода ShowDialog, нажав кнопку закрывает родительскую форму без того, чтобы подключить любые события ,

Для дальнейшего изучения, переопределения OnFormClosing метод на форме, установить брейк-поинт на методе, а когда перерыв точка хита, дает нам текущий вызов в стек (из окна Call Stack).

+2

Это проблема с DialogResult, она должна быть установлена ​​на None, чтобы предотвратить закрытие формы. –

+0

Я исследую свойство кнопки DialogResult, хотя это, вероятно, займет у меня несколько дней, чтобы подробно разобраться. Благодарим вас за предложения и информацию. – MarkL

+0

DialogResult для моих кнопок «Закрыть» и «Отмена» было «Нет», поэтому для запуска не было установлено свойство «Диалоговое окно». Нажатие клавиши Esc задало форму DialogResult для отмены, в примечании MD Unicorn выше. Теперь я возвращаю форму DialogResult в None в форме OnFormClosing переопределить, и я больше не вижу форму закрытой. Благодаря! – MarkL

Смежные вопросы