C # /. NET: TextBox не «сфокусирован» после запуска процесса - PullRequest
0 голосов
/ 01 апреля 2010

У меня проблема после открытия блокнота, когда я нажимаю кнопку "btnSearch".

Идея состоит в том, что после того, как я нажал кнопку "btnSearch", текстовое поле "txtSearch" должно быть "сфокусировано" даже после того, как процесс был инициирован / открыт за пределами главного окна.

Вот мой код:

    private void btnSearch_Click(object sender, RoutedEventArgs e)
    {
        System.Diagnostics.Process.Start("notepad");
        txtSearch.Focus(); // not working
    }

Есть предложения?

Ответы [ 5 ]

4 голосов
/ 01 апреля 2010

В вашем событии Page_Load попробуйте

Control c= GetPostBackControl(this.Page);

if(c != null)
{
   if (c.Id == "btnSearch")
   {
       SetFocus(txtSearch);
   }

}

Затем добавьте это на свою страницу или BasePage или что-то еще

public static Control GetPostBackControl(Page page)
{
     Control control = null;
     string ctrlname = page.Request.Params.Get("__EVENTTARGET");
     if (ctrlname != null && ctrlname != String.Empty)
     {
          control = page.FindControl(ctrlname);

     }
     else
     {
          foreach (string ctl in page.Request.Form)
          {
               Control c = page.FindControl(ctl);
               if(c is System.Web.UI.WebControls.Button)
               {
                   control = c;
                   break;
               }
          }

     }
     return control;
}
0 голосов
/ 08 августа 2012

Посмотрите на свойство TabIndex. При запуске приложения используйте значение 0 для элемента управления, на который нужно обратить внимание.

0 голосов
/ 11 июня 2010

Ниже приведен код, который вам понадобится. Это можно сделать с помощью служб взаимодействия

    private void setwind()
    {

        System.Diagnostics.Process.Start("notepad");

        System.Threading.Thread.Sleep(2000);  //  To give time for the notepad to open

        if (GetForegroundWindow() != this.Handle)
        {
            SetForegroundWindow(this.Handle);
        }
    }


    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    [DllImport("user32.dll")]
    static extern IntPtr GetForegroundWindow();
0 голосов
/ 01 апреля 2010

Приложения не могут «украсть» фокус у других приложений (начиная с Windows XP), самое близкое, чего они могут достичь - это мигание панели задач, что возможно через P / Invoke:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindow(IntPtr handle, bool invert);

Затем передайте форму Handle

0 голосов
/ 01 апреля 2010

Вы пробовали

txtSearch.Select ()
txtSearch.Focus()


Ваш TextBox находится внутри GroupBox?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...