Member 11776570 Ответов: 3

Как закрыть несколько дочерних форм с помощью кнопки escape в C#


я должен был использовать этот код
if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }

in key down event of the mdi form


Что я уже пробовал:

только работая в одной дочерней форме, другие дочерние формы не закрываются...

Richard MacCutchan

Это ваш третий пост по этой проблеме. У меня такое чувство, что ваш дизайн нуждается в рассмотрении.

Member 11776570

теперь у меня есть решение. спасибо Вам за ваши отзывы

3 Ответов

Рейтинг:
11

Member 11776570

это сработает

if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }

просто измените настройку каждого из них
child form
и установить
keypreview = true
в каждой дочерней форме настройка.


Рейтинг:
1

BillWoodruff

@Пользователь-11743105

Нет необходимости включать 'KeyPreview в дочерних формах MDI: просто напишите обработчик 'KeyPreview в форме Mdiparent; он будет получать ключевые события из всех дочерних форм:

private void MDIParentForm1_KeyDown(object sender, KeyEventArgs e)
{
            if (e.KeyCode == Keys.Escape)
            {
                Control callingControl = sender as Control;

                if (
                    MessageBox.Show(
                        "Really Quit ?",
                        "Quit Application ?", 
                        MessageBoxButtons.OKCancel,
                        MessageBoxIcon.Warning,
                        MessageBoxDefaultButton.Button2,
                        0

                    )
                    == DialogResult.OK
                )
                {
                    // for debugging only
                    if (callingControl != null) Console.WriteLine($"Escape pressed in: {callingControl.Text}");

                    Application.Exit();
                }
            }
        }
    }
}


Рейтинг:
0

W∴ Balboos, GHB

Вы можете добавить в список еще несколько форм - каждая форма имеет "настоящее" имя, например form1, form2 и т. д. Если вы убедитесь, что они находятся в области видимости, то сможете просмотреть их список в своем событии onclick (или, в данном случае, клавише ESC).


if (e.KeyCode == Keys.Escape)  {

                form1.Close();
                form2.Close();
                form3.Close();
                form4.Close();

} // if (e.KeyCode == Keys.Escape)


Вы могли бы, если умны, даже создать условия, чтобы только соответствующие окна закрывались на этом даже.