#c# #winforms
#c# #winforms
Вопрос:
У меня есть две самые верхние формы, расположенные довольно близко друг к другу (форма A и B). Если я нажимаю на A, она выходит на передний план и помещается поверх формы B. Я попытался перезаписать метод WndProc:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0201 || m.Msg == 0x0202 || m.Msg == 0x0203)
{
return;
}
base.WndProc(ref m);
}
Тем не менее, форма A по-прежнему накладывается на форму B, если я нажимаю на нее, поэтому я предполагаю, что это должен быть какой-то другой Msg-код. Надеюсь, кто-нибудь знает, как это сделать.
Комментарии:
1. Является ли форма A дочерней по отношению к форме B? Я не могу сказать, хотите ли вы, чтобы B был модальным, или сработает ли дочерняя ситуация MDI.
2. Нет, это не дочерний модал, это не способ сделать это.
3. Итак, вы всегда хотите, чтобы B было перед A, но вы хотите взаимодействовать с A, когда у него есть фокус?
4. Честно говоря, я не хочу взаимодействовать ни с одной из этих форм, просто B всегда должен быть перед A. Проблема в том, что пользователь может случайно нажать на одну из них. Я мог бы использовать Enable = false, но тогда я получаю этот раздражающий звук Ding. Ах, и, пожалуйста, не говорите мне ничего о плохом дизайне пользовательского интерфейса, это то, чего хочет мой клиент.
5. Можете ли вы отправить форму. Самое верхнее свойство в B, а не в A? msdn.microsoft.com/en-us/library /…
Ответ №1:
у вас есть функции BringToFront / BringToBack, доступные в ActiveForm. Я предлагаю вам разобраться в них. На мой взгляд, я бы, вероятно, переопределил один из них и убедился, что когда форма A сфокусирована, чтобы вывести форму B на передний план.
Однако проблема, с которой вы столкнулись, может быть решена без кода.