我有一个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,但它没有帮助。
如何让表单获得输入焦点?
答案 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