通过Form.Show显示表单没有重点?

时间:2010-11-17 00:24:29

标签: c# winforms user-controls

我有两个表单,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能够单击它,当该表单关闭时,立即能够在父表单上执行操作。

4 个答案:

答案 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;