【问题标题】:How do I ShowDialog based on MessageBox selection如何根据 MessageBox 选择 ShowDialog
【发布时间】:2023-03-28 09:52:01
【问题描述】:

我在这里使用 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??
        }
    }
}

感谢大家的帮助!

【问题讨论】:

  • 你想问他们多少次?直到他们点击“是”或一定次数?
  • 你不能再调用form.ShowDialog()吗......?
  • 我想继续显示,直到他们在 MyForm 上单击“是”或在消息框上单击“否”。

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


【解决方案1】:

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

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

【讨论】:

  • 我仍然习惯于 C# 中的整个属性。我总是忘记我可以以编程方式更改它们使用下拉菜单。
  • 还有一个问题。我的理解是,如果用户点击X关闭我的MyForm,那么ShowDialog()的返回值为DialogResult.Cancel。有没有办法在不关闭表单的情况下处理这个问题?
【解决方案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

【讨论】:

  • 在模态对话框中不需要调用this.Close()
  • 嗯,很有趣。我不知道,谢谢。无论如何,您以类似的方式回答了我。荣誉
  • 感谢您的帮助。大卫打败了你,所以我选择了他的答案,但我很感激:)
【解决方案3】:

有标准方式:Form.FormClosing

查看示例:example

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多