簡體   English   中英

當用戶單擊標題欄中的十字時,如何顯示MessageBox提示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM