繁体   English   中英

Form.invoke 不专注于控制

[英]Form.invoke not focusing on control

我之前问过这个问题的不同版本。 现在我有另一个问题:

  1. 我有一个线程,正在处理“ FormA
  2. 这个线程工作并触发一个事件,
  3. 在那个事件中,我使用“ FormA .Invoke”显示了一个新表单“ FormB ”。
  4. 我在“ FormB ”上有一个事件处理程序。 它的“FormB_Shown”,在这种方法中,我使用“Txt.Focus();”将注意力集中在“ FormB ”上的一些文本框上。
  5. 我的问题是,当我调用“ FormA .InvokeIfRequired(() => { FormB.ShowDialog(); })”时,它并没有关注“FormB”上的“Txt”。 有人可以帮忙吗?

我通过单击“Txt”位置解决了它,但它不是正式的解决方案。 我在这里想念什么? 我的代码如下;

“FormA”上的线程在事件下方触发;

    private void OnMessage()
    {
        this.InvokeIfRequired(() =>
        {
            var loginForm = new LoginForm();
            loginForm.ShowDialog();
        });
    }

“FormB”有以下方法

    private void LoginForm_Shown(object sender, EventArgs e)
    {
        TxtUsername.Focus();
    }

“InvokeIfRequired”扩展方法如下;

    public static void InvokeIfRequired(this Control control, MethodInvoker action)
    {
        if (control.InvokeRequired)
        {
            control.Invoke(action);
        }
        else
        {
            action();
        }
    }

我通过在 form_shown 事件上添加 Thread.Sleep 找到了解决方案。 睡眠后,我激活表单并设置 Form.ActiveControl 属性。 完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM