无模式形式不接收输入焦点

时间:2015-02-04 19:42:51

标签: c# multithreading winforms

我有一个Windows窗体(" form1"),它在调用ShowDialog()之前在应用程序的主线程中用Application.Run()打开(没有该形式作为参数) 。从主线程创建另一个线程(" thread2"),它与主线程并行运行。按下" form1"中的按钮,在" thread2"中创建另一个表单(" form2")。并以Show()方法显示。问题是:" form2"没有得到输入焦点,也没有接收键盘或鼠标输入。

form2创建如下:

public form2( )
{
    InitializeComponent();
    this.WindowState = FormWindowState.Normal;
    this.TopMost = true;
    this.SetStyle( ControlStyles.Selectable, true );
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    this.Bounds = Screen.PrimaryScreen.Bounds;
}

我在OnFocusLosing事件上创建了一个处理程序,它将一个字符串写入控制台,并看到form2在创建后正在失去焦点。是form1,用ShowDialog()打开并在主线程中运行抓住焦点回来?我在创建form2之前尝试最小化form1,但它没有帮助。

如何让表单获得输入焦点?

1 个答案:

答案 0 :(得分:1)

据我所知,Windows窗体应用程序中只有一个UI线程,您不能只生成线程并希望用户能够与它们进行交互。

如果您确实需要两个独立的UI线程,可以试试这个:https://social.msdn.microsoft.com/Forums/en-US/3f0e7794-8671-47c4-aa9a-3bd1f85c9963/how-to-create-a-winform-app-with-two-ui-threads