[英]How do I close the application when I click the cross in the title bar when I have several forms?
[英]How do I show a MessageBox prompt when the user has clicked the cross in the title bar
我目前正在開發一個C#Windows窗體應用程序。
用戶通過loginForm登錄后,它將被帶到mainForm。
我想用一種方式編寫代碼,用戶點擊mainForm標題欄上的十字后,會有一個提示詢問用戶“這將關閉應用程序。確認?” 然后是是和否按鈕。
如果是,將顯示另一個框,“申請已關閉!”
如果不是,消息框將關閉,應用程序將繼續運行。
我目前的代碼是:
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
System.Windows.Forms.Application.Exit();
}
else
{
this.Activate();
}
}
但它不起作用。
首先,我不知道為什么消息框彈出兩次以便整個事情關閉。
其次,如果我點擊否,表格也會關閉,我無法將其恢復。
要取消關閉表單,在else語句中需要e.Cancel = true;
。 在真實情況下,您不需要顯式Exit。
試一試
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
}
else
{
e.Cancel = true;
this.Activate();
}
}
我假設您的第二個MessageBox說它已關閉,僅用於測試目的。
你可能只想要。
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
e.Cancel = true;
}
}
請注意,該語句會檢查它們是否未命中,而不是它們是否取消。 這意味着如果他們點擊對話框中的x,則不會將其視為確認。
編輯:如果mainForm不是主要形式
好的,我想我現在有了你要問的東西。
我要做的是將我在上面的第二個代碼塊中的代碼放在FormClosing中,然后在FormClosed事件處理程序中有這個
private void mainForm_FormClosed(Object sender, FormClosedEventArgs e)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
System.Windows.Forms.Application.Exit();
}
這應該對你有幫助
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Are you sure you want to close?", "Close", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
e.Cancel = true;
}
你應該看看FormClosingEventArgs
取消屬性:這應該工作:
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
}
else
{
e.Cancel = true;
}
}
http://msdn.microsoft.com/en-us/library/system.windows.forms.formclosingeventargs.aspx
這將滿足您的需求:
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
}
else
{
e.Cancel = true;
}
}
編輯:回答你的第一個問題,看看這個 。 當您在應用程序中調用Exit()
時,將為所有打開的表單(包括mainForm
(仍處於打開狀態))引發FormClosing
事件,因此事件將被引發兩次。 通常我會期望這樣的事情導致無限遞歸和文字堆棧溢出,但我認為.NET足夠聰明以防止這種情況。
在相關的說明中,你應該通過調用Exit()
關閉你的程序 - 這是一種代碼味道。
要獲得所需的功能,請嘗試使用以下代碼:
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
//no need to do anything here.
}
else
{
e.Cancel = true;
}
}
var GetInput = MessageBox.Show("Do you want to Delete?", "Confirm Deletion",MessageBoxButton.OKCancel);
if (GetInput == MessageBoxResult.OK)
{
//do what you like
}
你的代碼完美適合我,沒有錯誤。
private void exiteProToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("message", "title", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Application.Exit();
}
else
{
this.Activate();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.