我有两个表单,Form1和一个托管Form2的UserControl。在Form1上的UserControl中,我调用Form2.Show();
。我也试过Form2.Show(this);
。无论哪种方式,重点都不在于表格。我必须在新表单中单击一次以使其获得焦点,然后我可以单击该表单中的项目。
我认为控件正在传回我的主控制/形式,因此焦点就会丢失。所以我等到Form2关闭后通过:
while (form2.Visible == true)
{
System.Threading.Thread.Sleep(100);
Application.DoEvents();
}
这似乎有效。然而,在我关闭表单之后,现在反过来也成立了。 Form1没有给定焦点(即使我调用this.Focus()
),直到我在主窗体窗口中单击一次。
任何想法如何妥善处理。我希望显示一个子表单(无模式),并且immediatley能够单击它,当该表单关闭时,立即能够在父表单上执行操作。
答案 0 :(得分:1)
您应该使用.ShowDialog()
,如果用户正确执行Form2操作或提前中止,也可以对此进行扩展以提供响应。
这确实会使表单在前面锁定焦点并停止在第一个表单上执行代码,直到该表单关闭。
答案 1 :(得分:1)
使用this.Activate();
代替this.Focus();
答案 2 :(得分:0)
不确定我是否完全关注,但是从您的UC尝试打开Form2,如下所示:
form2.Show(Parent);
这应该将UC的父表格指定为form2
的所有者。
答案 3 :(得分:0)
这是因为我为了显示表格而重写了WndProc。当我收到CBN_DROPDOWN消息时,我会显示表单。我修改了这个,而是调用显示表单的方法并修复它。
case CBN_DROPDOWN:
Invoke(new MethodInvoker(Show_DropDown));
return;