在FormClosing方法中处理是/否/取消消息框中的取消按钮

时间:2009-08-09 23:37:48

标签: c# .net messagebox

我在表单的 FormClosing 方法中添加了是/否/取消消息框。现在这是消息框文本:你想保存数据吗?

如果用户点击了取消按钮,我不是专业人员而且不知道如何处理? 确切地点击取消按钮的结果必须是表格保持打开。
如何防止在 FormClosing 方法中关闭我的表单?

我写到目前为止:;)

DialogResult dr = MessageBoxFarsi.Show("Do You Want to Save Data?","",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning);

//...
else if (dr == DialogResult.Cancel)
{
    ???
}

请帮我完成我的代码!
谢谢

5 个答案:

答案 0 :(得分:11)

FormClosing有一个布尔参数,如果函数返回,如果设置为True,将取消关闭表格IIRC。

编辑:例如,

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) {
    // Set e.Cancel to Boolean true to cancel closing the form
}

See here

答案 1 :(得分:9)

实际上我认为你缺少事件处理程序,哦,即使没有偶数处理程序,你也不能转向它。您必须使用这样的事件处理程序添加事件。

private void myform_Closing(object sender, FormClosingEventArgs e) 
{
    DialogResult dr = MessageBoxFarsi.Show("Do You Want to Save Data?","",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning)

    if (dr == DialogResult.Cancel) 
    {
        e.Cancel = true;
        return;
    }
    else if (dr == DialogResult.Yes)
    {
        //TODO: Save
    }
}

//now add a default constructor 
public myform()  // here use your form name.
{
    this.FormClosing += new FormClosingEventHandler(myform_Closing); 
}

如果此代码中有一些错误拼写,请原谅我,因为我没有在c#中写入并在此处复制粘贴。我刚刚在这里写了它。 :)

答案 2 :(得分:7)

您可以拥有以下内容:

if(dr == DialogResult.Cancel)
{
    e.Cancel = true;
}
else if(dr == DialogResult.Yes)
{
    //Save the data
}

上述代码只应在您选择是或否时关闭表单,并在您选择是时保存数据。

答案 3 :(得分:0)

你应该尝试这个功能

public DialogResult msgClose(string msg)
{
     return MessageBox.Show(msg, "Close", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
}

并像这样使用。

private void frm_FormClosing(object sender, FormClosingEventArgs e)
{
     if (conn.msgClose("Application close?") == DialogResult.No)
         e.Cancel = true;
     else
     {
         this.Close();
     }
}

答案 4 :(得分:0)

您可以尝试以下方法:

if (MessageBox.Show("Are you sure you want to quit?", "Attention!!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) == DialogResult.Yes)
{
   //this block will be executed only when Yes is selected
   MessageBox.Show("Data Deleted", "Done", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
  //this block will be executed when No/Cancel is selected
  //the effect of selecting No/Cancel is same in MessageBox (particularly in this event)
}

如果需要,也可以使用No类对CancelDialogResult按钮单击进行操作