【发布时间】:2017-12-14 21:27:25
【问题描述】:
假设我有一个带有两个窗体的 winforms 应用程序,一个是在程序运行时启动的主窗体,另一个是另一个窗体。下面是主窗体的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var f2 = new Form2();
f2.ShowDialog();
}
private void textBox1_Validated(object sender, EventArgs e)
{
System.Diagnostics.Debug.Print("Main Form: Validated!");
}
}
这是子窗体:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void textBox1_Validated(object sender, EventArgs e)
{
System.Diagnostics.Debug.Print("Child Form: Validated!");
}
}
当我运行应用程序时,我可以将焦点放在主窗体上的文本框中,当然当我退出时,它会触发Validated 事件并将Main Form: Validated! 打印到输出。 如果我将焦点放在文本框中并关闭主窗体(即结束程序),也会发生这种情况。
当我点击弹出子表单实例的主表单上的按钮时,我可以将焦点放在子表单的文本框中,当我跳出标签时,Validated 事件就会触发它。但是,与关闭表单时的主表单行为不同,如果我将焦点放在子表单的文本框中并关闭子表单,Validated 事件永远不会触发。
为什么验证的事件不触发,有没有办法让它触发。
我依靠某些控件的验证事件来更新我的视图模型。我想确保即使失去焦点是由于表单关闭甚至应用程序本身结束,它们也始终会触发。
【问题讨论】:
-
子窗体上有多少个控件?只是文本框?如果添加例如,行为是否保持不变子窗体的按钮?
-
它也有一个按钮,我可以通过它跳出文本框并触发
Validated事件。 -
如果你 Show() 它而不是 ShowDialog() 怎么样?
-
是的,Show 工作正常。但我需要一个模态表单。