Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с MessageBox в дочерних формах

53K
23 октября 2009 года
uvi54
4 / / 23.10.2009
Добрый день.
Столкнулся с такой проблемой:
в приложении назначен хук на нажатие клавиш. В этом хуке следующая обработка при нажатии Escape:
Код:
DialogResult dr = DialogResult.None;
   dr = MessageBox.Show( "Данные были изменены. Выполнить сохранение?", "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
   if (dr == DialogResult.Yes)
   {
       /*Save data*/
   }
   if (dr == DialogResult.Cancel)
   {
       return CallNextHookEx(_hookHandle, (int)Keys.None, wParam , lParam);
      /* или return 1; - поведение аналогичное*/
   }
   curForm.toolStrip.Items["sbExit"].PerformClick();
   return 1;

если curForm - модальная, то все работает отлично.
Если curForm - дочерняя, нажимаем Esc, в появившемся MessageBox жмем еще раз Esc, MessageBox закрывается и последующие нажатия Esc на текущей форме "пробрасываются" в MessageBox, те MessageBox отрисовывается и сразу же закрывается с результатом DialogResult.Cancel.

При этом замечены следующие особенности:
1. Если обеспечить "залипание" Esc, то иногда MessageBox все-таки отрабатывает корректно.
2. Если в коде поставить breakPoint, то после передачи фокуса в MS VS и обратно в приложение, MessageBox так же отрабатывает корректно.

Может кто-нибудь сталкивался с подобным поведением, поделитесь пожалуйста решением.
Спасибо.
53K
30 октября 2009 года
uvi54
4 / / 23.10.2009
проблемма решена - перемудрил с вызовами CallNextHookEx в хуке :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог