【问题标题】:How to focus on a form C#如何专注于表单 C#
【发布时间】:2017-02-04 00:41:57
【问题描述】:

由于某种原因,即使它在最顶层打开并激活(),我的表单也不总是获得焦点;和焦点();和BringToFront();都被调用了。

程序和源代码: sites.google.com/site/windowsprogramfortranslation/

我在所有地方都添加了所有这些,但谷歌翻译的表单和文本框仍然没有被选中

void FormMain_Shown(object sender, EventArgs e)
{
    BringToFront();
    webBrowserMain.Focus();
    panelMain.Enabled = false;
    Focus();
    panelMain.Enabled = true;
    Activate();
    webBrowserMain.Select();
    webBrowserMain.Focus();
}

void webBrowserMain_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (webBrowserMain.ReadyState == WebBrowserReadyState.Complete)
    {
        this.Activate();
        webBrowserMain.Select();
        webBrowserMain.Focus();

        int numOfTries = 0;
        repeat:
        if (numOfTries < 10)
        {
            try
            {
                webBrowserMain.Document.Window.ScrollTo(0, 0);
                webBrowserMain.Document.GetElementById("source").Focus();
                //webBrowserMain.Document.GetElementById("source").InvokeMember("click");
            }
            catch
            {//if the document hasn't loaded yet
                numOfTries++;
                System.Threading.Thread.Sleep(40);
                goto repeat;
            }
        }
    }
}

public static void openTranslateWindow()
{
    formMain.Show();
    formMain.TopMost = true;
    formMain.WindowState = FormWindowState.Minimized;
    formMain.Show();
    formMain.WindowState = FormWindowState.Normal;
    formMain.BringToFront();

    formMain.webBrowserMain.Focus();

    formMain.panelMain.Enabled = false;
    formMain.Focus();
    formMain.panelMain.Enabled = true;
    formMain.Activate();
    formMain.webBrowserMain.Select();
    formMain.webBrowserMain.Focus();
}

【问题讨论】:

  • goto 而不是 while 循环,这确实是一些可爱的代码!
  • 所以您的表单有一个 WebBrowser 控件,而您正试图在它正在加载的网站上选择一个文本框?
  • 是的,我正在尝试在我的网络浏览器中选择文本框,但它并不总是被选中。请在我的网站中查看我的源代码。
  • @user3806409 如果您希望有人帮助您,您应该在问题本身中包含所有代码,请参阅minimal reproducible example
  • @John1990 没有人会下载您的程序来为您完成工作。如果您需要帮助,则需要以minimal reproducible example 的形式出现在问题中。如果你不能提供一个,那么问题是太宽泛了,应该被关闭。

标签: c# .net windows


【解决方案1】:

尝试在显示主表单时设置文本框焦点,而不是在文档完成时设置。

private void FormMain_Shown(object sender, EventArgs e)
{
    BringToFront();
    HtmlElement textArea = webBrowserMain.Document.GetElementById("source");
    if (textArea != null)
    {
        textArea.Focus();
    }
}

【讨论】:

    猜你喜欢
    • 2012-04-13
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多