接續前一篇"將視窗拆成1+2*3的窗格"
MenuItem的熱鍵有兩種,一種是Header值給特定底線('_'),一種是設定InputGestureText
(尚未測試不同的MenuItem給相同熱鍵會不會發生錯誤)
<MenuItem Header="_File">
<MenuItem x:Name="MenuItemExit" Header="E_xit" InputGestureText="Alt+F4" Click="MenuItemExit_Click"/>
</MenuItem>
WPF按視窗右上角的叉叉會觸發
void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e),
一般而言,會做防呆避免誤按,程式也需要在結束時做很多收尾工作,
因此乾脆總是把CancelEventArgs.Cancel設為true,程式的結束則改為呼叫Environment.Exit
範例紀錄如下:
void Window_Closing(object sender, CancelEventArgs e)
{
e.Cancel = true; //false總是會結束程式
MenuItemExit_Click(null, null);
}
void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
const string caption = "結束程式";
const string messageBoxText = "確定?";
MessageBoxResult result = MessageBox.Show(messageBoxText, caption, MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
if (result != MessageBoxResult.OK)
{
return;
}
//timer.Stop(); //視專案需求調整
//資料寫DB
//紀錄log
Environment.Exit(exitCode);
}
參考
https://docs.microsoft.com/zh-tw/windows/win32/debug/system-error-codes
exitCode=0代表正常關閉,1~15999微軟有定義(非強制性),
自行設計的程式如果要自定義其他結束情境,又要避免和微軟的混淆,exitCode可以使用16000以後的數值