form1 中有控件 button1, textBox1, textBox2...
点击 button1 创建 form2 并显示form2 的 Deactivate 事件中 关闭自身,代码为// 当窗体被停用时,关闭自身
private void Form2_Deactivate(object sender, EventArgs e)
{
this.Close();
}
问题是:
当点击 form1 中的任一 textBox 控件,form2 关闭了,但输入焦点返回到了 button1 上,必须再次点击 textBox ,textBox才能得到焦点,进行输入。这非常烦人。
(如果不是 form2 自己关闭,而在 form1 的事件中关闭 form2,就没有此问题。)我希望 是 form2 失去焦点后即应自己关闭或隐藏,而如果点击的是 form1 中的控件,该控件能够立即得到输入焦点。我是在做自定控件中遇到此问题,查看其他人的控件却无此问题。找不到答案,用两个 form 测试也是如此。
请问大家是如何解决此问题的?谢谢
点击 button1 创建 form2 并显示form2 的 Deactivate 事件中 关闭自身,代码为// 当窗体被停用时,关闭自身
private void Form2_Deactivate(object sender, EventArgs e)
{
this.Close();
}
问题是:
当点击 form1 中的任一 textBox 控件,form2 关闭了,但输入焦点返回到了 button1 上,必须再次点击 textBox ,textBox才能得到焦点,进行输入。这非常烦人。
(如果不是 form2 自己关闭,而在 form1 的事件中关闭 form2,就没有此问题。)我希望 是 form2 失去焦点后即应自己关闭或隐藏,而如果点击的是 form1 中的控件,该控件能够立即得到输入焦点。我是在做自定控件中遇到此问题,查看其他人的控件却无此问题。找不到答案,用两个 form 测试也是如此。
请问大家是如何解决此问题的?谢谢
在 form2 的 LostFocus 事件中 关闭自身,就可以实现。LostFocus 事件是关联于 WM_KILLFOCUS 和 WM_SETFOCUS Windows 消息的低级别焦点事件Deactivate 与 LostFocus 事件的机制有何不同呢?
而且在用户控件中使用 form2 , 用户控件在 form1 中,
点击了 form2 中的控件后,form2就已失去焦点, 再点击 form1 就不再激发 form2 的 LostFocu 事件
有没有简洁的办法?
可以改成响应form1的Activated事件,把form2隐藏;或者在form2的Deactivate事件中启动一个定时器,延迟一段时间再关闭自己。