C# 通过表单显示表单。是否显示未指定焦点?
我有两个表单,Form1和一个承载Form2的UserControl。在Form1上的UserControl中,我调用C# 通过表单显示表单。是否显示未指定焦点?,c#,winforms,user-controls,C#,Winforms,User Controls,我有两个表单,Form1和一个承载Form2的UserControl。在Form1上的UserControl中,我调用Form2.Show()。我也试过Form2.Show(这个)。无论哪种方式,焦点都不会放在表单上。我必须在新表单中单击一次以使其具有焦点,然后才能单击该表单中的项目 我认为控件正在传递回我的主控件/窗体,因此焦点正在丢失。因此,我将通过以下途径等待Form2关闭: while (form2.Visible == true) { Sys
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。问题是我希望用户也能够对主窗体进行操作,当他们这样做时,它将关闭该窗体。有点像弹出窗口。