0

我正在使用带有确定和取消按钮的表单。当用户单击“取消”按钮时,用户将收到一条消息以确认表单是否应该关闭。单击确定 = 关闭,但是当单击取消时,表单不应该关闭,但这就是正在发生的事情,我已经测试为表单添加一些事件代码,但仍然关闭。我该怎么做才能让它正常工作?

        // Button - Cancel
    private void btnCancel_Click(object sender, EventArgs e)
    {
        // Message box to confirm or not
        if (MessageBox.Show("Do you really want to cancel and discard all data?",
"Think twice!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==     
DialogResult.Yes)  
        {
            // Yes
            //this.Close(); // Closes the contact form
            m_closeForm = false;
        }
        else
        {
            m_closeForm = false;
            // No
            // Do nothing, the user can still use the form
        }
    }

    private void ContactForm_Formclosing(object sender, FormClosingEventArgs e)
    {

        if (m_closeForm)

            e.Cancel = false; // Stänger formuläret. Inget skall hända

        else

            e.Cancel = true; // Stänger inte formuläret

    }
4

3 回答 3

2

您可以通过在表单关闭事件中添加带有对话框结果的消息框来尝试以下操作。我相信这是更好的方法:

    private void btnCancel_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("Do you really want to cancel and discard all data?", "Think twice!",
       MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
        {
            this.Close();
        }
        // Form wont close if anything else is clicked
    }

    private void btnOk_Click(object sender, EventArgs e)
    {
        // PerformAction()
        this.Close();
    }

我想这就是你要找的。

于 2012-05-13T08:30:23.633 回答
1

我想您会发现在表单的 Designer.cs 文件中,您将拥有以下行:

this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;

删除此行,无论您的客户 MessageBox 的结果如何,您的表单都将不再自动关闭。

于 2012-08-20T00:14:30.313 回答
0

要取消关闭,您可以使用FormClosingEventArgs属性,即e.Cancelto true

FormClosing在表单事件中使用此代码。

if (MessageBox.Show("Do you really want to cancel and discard all data?",
"Think twice!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==     
DialogResult.Yes)
{
    e.Cancel = false;
}
else
{
    e.Cancel = true;
}
于 2012-05-13T08:33:11.927 回答