如何基于MessageBox选择ShowDialog

时间:2011-07-27 16:08:52

标签: c# .net forms dialog modal-dialog

我在这里使用C#。我有一个表单,用户可以选择是或否,如果他们选择否,则会出现一个消息框,询问他们是否确定。如果他们单击否,我想再次显示该表单。这是我的代码:

public void function()
{
    MyForm form = new MyForm();
    if (form.ShowDialog() == DialogResult.No)
    {
        if (MessageBox.Show("Are you sure?",
                            MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            runFinished.Dispose();
            return;
        }
        else
        {
            //Show form again. How??
        }
    }
}

感谢大家的帮助!

4 个答案:

答案 0 :(得分:3)

安排No按钮MyForm拨打MessageBox电话。只有当用户确定您,然后继续关闭对话框。在对话框关闭后,您当前提出问题的方法是不正确的。

您可以通过确保在代码中设置DialogResult而不是使用No按钮的DialogResult属性来实现更改。然后在按钮的单击处理程序中运行消息框。如果用户确认操作,请将表单DialogResult设置为DialogResult.No

答案 1 :(得分:2)

根据是否选择了no或yes(在MyForm中)调用两个事件。例如

void OnNoEvent(object sender, EventArgs e)
{
   if (MessageBox.Show("Are you sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
   {
      this.DialogResult = DialogResult.No;
      this.Close();
   }
}

void OnYesEvent(object sender, EventArgs e)
{
   this.DialogResult = DialogResult.Yes;
   this.Close();
}

这可能比多次打开对话框要好。

然后打开对话框的代码很简单。

MyForm form = new MyForm();
if (form.ShowDialog() == DialogResult.No)
   // perform actions here

答案 2 :(得分:1)

有标准手段:Form.FormClosing

参见示例:example

答案 3 :(得分:0)

也许我在这里遗漏了一些东西,但为什么不使用while循环?

public void function()
{
    MyForm form = new MyForm();

    while(form.ShowDialog() == DialogResult.No)
    {
        if (MessageBox.Show("Are you sure?",
                             MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            runFinished.Dispose();
            return;
        }
    }
}