John1990
John1990

Reputation: 29

How to focus on a form C#

For some reason not always my form gets focus even if it's open on topmost and Activate(); and Focus(); and BringToFront(); are all called.

the program and the source code: sites.google.com/site/windowsprogramfortranslation/

i added all of these everywhere and still the form and textbox of Google Translate does not get selected

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();
}

Upvotes: 0

Views: 128

Answers (1)

gunnerone
gunnerone

Reputation: 3572

Try setting the textbox focus when you show the main form, instead of when the document is complete.

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

Upvotes: 1

Related Questions