【发布时间】:2015-04-04 11:39:00
【问题描述】:
我有一个 Windows 窗体(“form1”),它在调用 Application.Run() 之前在应用程序的主线程中以 ShowDialog() 打开(没有该窗体作为参数)。从主线程创建另一个线程(“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 在创建后就失去了焦点。是用ShowDialog() 打开并在主线程中运行的form1 抢回了焦点吗?我尝试在创建 form2 之前最小化 form1,但没有帮助。
如何让表单接收输入焦点?
【问题讨论】:
-
谷歌搜索术语“模态”。这就是
ShowDialog所做的。 -
是的,使用 ShowDialog 就可以了。
标签: c# multithreading winforms