【问题标题】:Modeless form doesn't receive the input focus无模式表单不接收输入焦点
【发布时间】: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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多