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;
Проблема с MessageBox в дочерних формах
Столкнулся с такой проблемой:
в приложении назначен хук на нажатие клавиш. В этом хуке следующая обработка при нажатии Escape:
Код:
если curForm - модальная, то все работает отлично.
Если curForm - дочерняя, нажимаем Esc, в появившемся MessageBox жмем еще раз Esc, MessageBox закрывается и последующие нажатия Esc на текущей форме "пробрасываются" в MessageBox, те MessageBox отрисовывается и сразу же закрывается с результатом DialogResult.Cancel.
При этом замечены следующие особенности:
1. Если обеспечить "залипание" Esc, то иногда MessageBox все-таки отрабатывает корректно.
2. Если в коде поставить breakPoint, то после передачи фокуса в MS VS и обратно в приложение, MessageBox так же отрабатывает корректно.
Может кто-нибудь сталкивался с подобным поведением, поделитесь пожалуйста решением.
Спасибо.
проблемма решена - перемудрил с вызовами CallNextHookEx в хуке :)