如何根据MessageBox的选择显示对话框

本文关键字:选择 显示 对话框 MessageBox 何根 | 更新日期: 2023-09-27 18:03:37

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

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??
        }
    }
}

谢谢大家的帮助!

如何根据MessageBox的选择显示对话框

安排No按钮MyForm调用MessageBox。只有在用户确定之后,您才能继续关闭对话框。你现在在对话结束后问问题的方法是不正确的。

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

根据是否选择了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

有一个标准的方法:Form.FormClosing.

参见example: example

也许我在这里错过了一些东西,但为什么不使用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;
        }
    }
}