C# 表单和对话框.Result.None

C# 表单和对话框.Result.None,c#,winforms,C#,Winforms,我正在学习表单,但不知怎么搞不清楚这段代码的问题是什么,当我想在Form2中按Dialog.Result.Yes按钮或Dialog.Result.No按钮时,要保持Form2处于打开状态,请在单击其中一个按钮后关闭 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_MouseClick(object

我正在学习表单,但不知怎么搞不清楚这段代码的问题是什么,当我想在Form2中按Dialog.Result.Yes按钮或Dialog.Result.No按钮时,要保持Form2处于打开状态,请在单击其中一个按钮后关闭

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_MouseClick(object sender, MouseEventArgs e)
    {
        Formular2 Form2 = new Formular2();
        Form2.ShowDialog();
        if (Form2.DialogResult == DialogResult.Yes)
        {
            this.DialogResult = DialogResult.None;
        }
        else if (Form2.DialogResult == DialogResult.No)
        {
            DialogResult = DialogResult.None;
        }
    }

}

感谢您提供的任何建议

如果您想保持Form2的打开状态,您需要设置Form2的DialogResult属性,而不是Form1的DialogResult属性

您需要在Form2上关闭Form2的按钮中移动此逻辑

所以,假设在Formular form类上有一个名为buttonOK的按钮,其属性DialogResult设置为DialogResult.OK。
然后在该类代码中为按钮单击事件(而不是MouseClick事件)编写事件处理程序

编辑

为了更好地理解这个流程,您应该考虑在调用按钮单击事件的事件处理程序之前,表单引擎从按钮的DealRebug属性中存在的值设置表单的DealRead属性。因此,如果验证结果是正确的,则无需执行任何操作,表单将关闭并返回DialogResult.OK(或您在按钮的DialogResult属性中输入的任何内容)。

Form2
中选择用于分配相应对话框结果的控件。 如果单击Form2控件,它将生成相同的
对话框结果

表格2中的示例:

button1.DialogResult = DialogResult.Yes;
button2.DialogResult = DialogResult.No;
现在按下这些按钮中的任何一个都应关闭
窗体2

如果要限制关闭
按钮1
按钮2
。需要对单击事件进行以下更改:

private void button1_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.None;
}
表格1

button1.DialogResult = DialogResult.Yes;
button2.DialogResult = DialogResult.No;
在result中,通过查看
Form2.DialogResult
,您可以看到结果是什么。您可以在从
Form2
对话框获得结果时执行此操作:

Formular2 Form2 = new Formular2();
Form2.ShowDialog();

if (Form2.DialogResult == DialogResult.Yes)
{
    //
}
else if (Form2.DialogResult == DialogResult.No)
{
   //
}

设置DialogResult的操作将导致窗体关闭,并将该结果返回到创建实例的窗体,这样它就可以检查结果并采取适当的操作。在您的情况下,由于要保持第二个表单处于打开状态,您需要不将DialogResult.No分配给按钮并按照Steve的建议执行,或者您可以拦截表单的FormClosing事件,如果DialogResult.No设置为None,则测试DialogResult并取消表单的关闭。
尽管我建议如果你想保持表单的开放性,就不要使用DialogResult


在任何显示为模式的windows窗体上(使用
ShowDialog()
),设置DialogResult的操作将导致隐藏模式窗体并将控件返回调用代码

如果您希望再次显示表单,可以执行以下操作:

private void button1_MouseClick(object sender, MouseEventArgs e)
{
    Formular2 Form2 = new Formular2();
    Form2.ShowDialog();
    if (Form2.DialogResult == DialogResult.Yes)
    {
        Form2.DialogResult = DialogResult.None;
    }
    else if (Form2.DialogResult == DialogResult.No)
    {
        Form2.DialogResult = DialogResult.None;
    }

    Form2.Show(); // or Form2.ShowDialog()
}

当您到达If语句时,您的表单已经关闭。你需要使用Form2的FormClosing事件来阻止表单关闭。我的答案代码可以让你实现你想要的;但我仍然对你希望通过这样做实现什么感到困惑?例如,如果您没有使用Form2的
DialogResult
属性,为什么要这样做呢?
private void button1_MouseClick(object sender, MouseEventArgs e)
{
    Formular2 Form2 = new Formular2();
    Form2.ShowDialog();
    if (Form2.DialogResult == DialogResult.Yes)
    {
        Form2.DialogResult = DialogResult.None;
    }
    else if (Form2.DialogResult == DialogResult.No)
    {
        Form2.DialogResult = DialogResult.None;
    }

    Form2.Show(); // or Form2.ShowDialog()
}