C# 表单和对话框.Result.None
我正在学习表单,但不知怎么搞不清楚这段代码的问题是什么,当我想在Form2中按Dialog.Result.Yes按钮或Dialog.Result.No按钮时,要保持Form2处于打开状态,请在单击其中一个按钮后关闭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
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()
}