2015-12-08 129 views
1

我正在使用winforms + c#創建一個小項目,我有一個問題,因爲我在項目中使用第二個窗體作爲對話框。當用戶嘗試關閉此功能時,我想向他們提供確認屏幕,以防止在關閉表單時丟失任何數據。這個對話框窗體還將顯示一個「主頁」按鈕,關閉對話框窗體,再次將它們與主窗口對齊。當在屏幕頂部按下Windows X按鈕時,會出現問題,要求我設置「關閉窗體」事件進行管理。然而,這與我現在的代碼如下所示創建一個無限循環。有什麼辦法可以避免這種情況?驗證窗體關閉無限循環

private void frmCreateRoute_FormClosing(object sender, FormClosingEventArgs e) 
{ 

    DialogResult Safe_to_exit_check = MessageBox.Show("Are you sure you would like to go to the home screen? \n(Any entered data will be lost.)", "", MessageBoxButtons.YesNo); 

    if (Safe_to_exit_check == DialogResult.Yes) 
    { 
    this.Close(); 
    } 
} 

和簡單的:

private void Home_button_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
} 

的home鍵。

感謝

+1

你需要設置'e.Cancel = TRUE;如果用戶選擇不同於任何東西是的 –

回答

1

您需要設置e.Cancel=true如果用戶選擇比DialogResult.Yes不同的什麼東西,否則讓表格收盤:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    var result = MessageBox.Show("Are you sure you want to close the form?", 
            "Close", MessageBoxButtons.YesNoCancel); 

    if (result != System.Windows.Forms.DialogResult.Yes) 
     e.Cancel = true; 
} 
+1

完美!這是整理出來的。感謝代碼示例。 – user2874417

+0

歡迎您:) –

4

在你的FormClosing,設置:

e.Cancel = true; 

,以防止關閉窗體。那裏不要使用this.Close()