我正在構建具有多個表單的 WPF 應用程式,我的目標是,假設 LoginForm 我有一個名為 Login 的按鈕,單擊該按鈕時會關閉當前表單(上面的 LoginForm)并打開另一個表單(假設 Form1 )。
請注意,我試圖一次只打開一個表單。
代碼 -
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
if(everything okay)
{
Form1 frm = new Form1();
frm.Show();
Close();
}
else
{
return;
}
}
這作業正常。但是,我的第二個想法是,如果點擊右上角的X,我想關閉這個表單,而不是打開任何其他表單,基本上退出應用程式。
代碼-
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult rez = MessageBox.Show("Do you wish to leave the app?", "Question?", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (rez != MessageBoxResult.Yes)
{
e.Cancel = true;
}
}
這是我的問題開始的地方,我發現 Window_Closing 和 this.Close() 是同一個事件,所以,當我單擊登錄按鈕時,MessageBoxResult 仍然出現,即使這不是我的目標。如果可能的話,我想以某種方式將這兩個事件分開。我該怎么做?
uj5u.com熱心網友回復:
您可以在呼叫之前暫時取消事件處理程式Close():
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
if (everything okay)
{
Form1 frm = new Form1();
frm.Show();
Closing -= Window_Closing;
Close();
Closing = Window_Closing;
}
else
{
return;
}
}
或者使用一個bool變數來確定是否顯示MessageBox:
private bool _showMessageBox = true;
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
if (everything okay)
{
Form1 frm = new Form1();
frm.Show();
_showMessageBox = false;
Close();
_showMessageBox = true;
}
else
{
return;
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!_showMessageBox)
return;
MessageBoxResult rez = MessageBox.Show("Do you wish to leave the app?", "Question?", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (rez != MessageBoxResult.Yes)
{
e.Cancel = true;
}
}
uj5u.com熱心網友回復:
this.Close 不是事件。this.Close() 是一種方法,然后引發事件 Window_Closing
嘗試這樣的事情:
Form1 frm = new Form1();
Hide();
frm.ShowDialog();
Close();
您創建一個表單,然后隱藏登錄表單,然后顯示表單的對話框。在新的 Form1() 關閉后,將引發關閉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/458852.html
上一篇:WPF切換視圖
下一篇:按鈕用戶控制元件WPF
