2013-07-03 7 views
0

Alt + F4 является ярлык для закрытия формы. Когда я использую этот ярлык в среде MDI, приложение закрывается, поэтому очевидно, что ярлык применяется к «Контейнеру», а не к «Детскому формату» .Как закрыть окно ребенка с помощью клавиши Alt + F4?

Что бы лучшая практика, чтобы захватить это событие и закрыть активный ребенка вместо контейнера

я прочитал о регистрации Alt + F4 в качестве горячих клавиш, когда MDI активируется. Когда MDI деактивирует, отменяет регистрацию горячей клавиши. Итак, горячая клавиша не влияет на другие окна.

кто-то может сказать о регистрации Alt + F4 или что-то лучше

+4

Попробуйте следующее: CTRL + F4 – codingbiz

+3

Не делайте этого. Не связывайтесь с моими быстрыми клавишами OS. CTRL + F4 является принятым ярлыком для того, что вы хотите сделать. –

+0

Согласитесь с DMoses. Если вы хотите, чтобы ваше окно закрывалось с ALT + F4, не делайте его дочерним MDI. Вместо этого создайте окно верхнего уровня. –

ответ

-1

Вы можете изменить метод void Dispose(bool disposing) в вашем WinForm закрыть форму ребенка вместо того, чтобы, как это:

protected override void Dispose(bool disposing) 
{ 
    if (/* you need to close a child form */) 
    { 
     // close the child form, maybe by calling its Dispose method 
    } 
    else 
    { 
     if (disposing && (components != null)) 
     { 
      components.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 
} 

EDIT: как сказал мой комментатор, вместо изменения переопределенного метода Dispose вы должны просто переопределить метод OnFormClosing, а именно:

protected override void OnFormClosing(FormClosingEventArgs e) 
{ 
    if (/* you need to close the child form */) 
    { 
     e.Cancel = true; 
     // close the child form, maybe with childForm.Close(); 
    } 
    else 
     base.OnFormClosing(e); 
} 
+1

У вас есть правильная идея, но использование метода 'Dispose' - неправильный подход. Вместо этого замените 'OnFormClosing' и установите' e.Cancel' значение 'true'. –