2010-04-01 4 views
0

У меня возникла проблема после открытия блокнота после нажатия кнопки «btnSearch».C# /. NET: TextBox не «сфокусирован» после запуска процесса.

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

Вот мой код:

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

Любые предложения?

+0

Является ли это WPF или WinForms? –

+0

Я использовал WPF и WinForms одновременно. Это проблема? – abramlimpin

+0

Держу пари, вы теряете фокус на приложении, которое вы открываете. – TheGeekYouNeed

ответ

0

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

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

В вашем случае 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

Является ли «Управление» в System.Windows.Forms.Control или System.Windows.Controls.Control? – abramlimpin

+2

Этот ответ, похоже, относится к ASP.Net, а не к WinForms (или WPF) –

+0

Да, извините, это пример ASP.Net. – TheGeekYouNeed

0

Вы пробовали

txtSearch.Select() 
txtSearch.Focus() 

?
Является ли ваш TextBox внутри GroupBox?

+0

txt.Search.Select тоже не работает. Я просто хочу «сфокусировать» текстовое поле (панель должна мигать) – abramlimpin

+0

текстовое поле находится не в групповом поле – abramlimpin

0

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

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

Затем передать его форму-х Handle

0

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