Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过表单显示表单。是否显示未指定焦点?_C#_Winforms_User Controls - Fatal编程技术网

C# 通过表单显示表单。是否显示未指定焦点?

C# 通过表单显示表单。是否显示未指定焦点?,c#,winforms,user-controls,C#,Winforms,User Controls,我有两个表单,Form1和一个承载Form2的UserControl。在Form1上的UserControl中,我调用Form2.Show()。我也试过Form2.Show(这个)。无论哪种方式,焦点都不会放在表单上。我必须在新表单中单击一次以使其具有焦点,然后才能单击该表单中的项目 我认为控件正在传递回我的主控件/窗体,因此焦点正在丢失。因此,我将通过以下途径等待Form2关闭: while (form2.Visible == true) { Sys

我有两个表单,Form1和一个承载Form2的UserControl。在Form1上的UserControl中,我调用
Form2.Show()。我也试过
Form2.Show(这个)。无论哪种方式,焦点都不会放在表单上。我必须在新表单中单击一次以使其具有焦点,然后才能单击该表单中的项目

我认为控件正在传递回我的主控件/窗体,因此焦点正在丢失。因此,我将通过以下途径等待Form2关闭:

      while (form2.Visible == true)
      {
          System.Threading.Thread.Sleep(100);
          Application.DoEvents();
      }    
这似乎奏效了。然而,在我关闭表单之后,现在情况正好相反。在我在主窗体窗口中单击一次之前,Form1不会被赋予焦点(即使我调用
this.focus()


你知道如何正确处理这个问题吗。我想显示一个子窗体(无模式),并立即能够单击它,当该窗体关闭时,立即能够对父窗体执行操作。

您可能应该使用
.ShowDialog()
,这也可以扩展,以便在用户正确执行Form2操作或提前中止时给出您的响应


这确实会使窗体在前面锁定焦点,并将在第一个窗体上停止代码执行,直到该窗体关闭。

使用
This.Activate()
代替
this.Focus()

我不确定我是否完全遵守了,但从您的UC尝试如下打开Form2:

form2.Show(Parent);

这应该将UC的父表单指定为
form2
的所有者。

这是因为我覆盖WndProc以显示表单。当我收到CBN_下拉消息时,我会显示表单。我通过调用显示表单的方法解决了这个问题,它解决了这个问题

case CBN_DROPDOWN:
    Invoke(new MethodInvoker(Show_DropDown));
    return;

承载表单的用户控件?它只是创建它并调用Show(),还是在窗体的TopLevel属性设置为false的情况下,它实际上充当窗体的父级?显示用户控件代码。它只是作为父控件。它是一个组合框,我在其中“下拉”自己的ListView,而不是标准对话框。此ListView托管在表单中(我找不到直接显示ListView的方法)。我将研究添加UserControl。问题是我希望用户也能够对主窗体进行操作,当他们这样做时,它将关闭该窗体。有点像弹出窗口。