接續前一篇"將視窗拆成1+2*3的窗格"

MenuItemExit_Click.jpg

 

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以後的數值

 

 

arrow
arrow
    文章標籤
    程式設計 C# UnitTest WPF
    全站熱搜
    創作者介紹
    創作者 Yang 的頭像
    Yang

    GNAySolution

    Yang 發表在 痞客邦 留言(0) 人氣()