简体   繁体   English

Form.invoke 不专注于控制

[英]Form.invoke not focusing on control

I asked a different version of this question before.我之前问过这个问题的不同版本。 Now i have another problem:现在我有另一个问题:

  1. I have a thread, working on " FormA "我有一个线程,正在处理“ FormA
  2. This thread working and firing an event,这个线程工作并触发一个事件,
  3. On that event, i show a new form " FormB " by using " FormA .Invoke".在那个事件中,我使用“ FormA .Invoke”显示了一个新表单“ FormB ”。
  4. I have an event handler on " FormB ".我在“ FormB ”上有一个事件处理程序。 Its "FormB_Shown", in that method i focus on some textbox on " FormB " by using "Txt.Focus();"它的“FormB_Shown”,在这种方法中,我使用“Txt.Focus();”将注意力集中在“ FormB ”上的一些文本框上。
  5. My problem is, when i call " FormA .InvokeIfRequired(() => { FormB.ShowDialog(); })", its not focusing on "Txt" on "FormB".我的问题是,当我调用“ FormA .InvokeIfRequired(() => { FormB.ShowDialog(); })”时,它并没有关注“FormB”上的“Txt”。 Can someone please help?有人可以帮忙吗?

I solved it by clicking on "Txt" location but its not a formal solution.我通过单击“Txt”位置解决了它,但它不是正式的解决方案。 What i miss here?我在这里想念什么? My code like below;我的代码如下;

Thread on "FormA" fired below event; “FormA”上的线程在事件下方触发;

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

"FormB" has below method “FormB”有以下方法

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

"InvokeIfRequired" extension method like below; “InvokeIfRequired”扩展方法如下;

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

I found a solution by adding Thread.Sleep on form_shown event.我通过在 form_shown 事件上添加 Thread.Sleep 找到了解决方案。 After sleep, i activate form and set Form.ActiveControl property.睡眠后,我激活表单并设置 Form.ActiveControl 属性。 Its done.完成。

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

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