C#/.NET: TextBox не "сфокусирован" после запуска процесса
У меня возникла проблема после открытия блокнота после нажатия кнопки "btnSearch".
Идея состоит в том, что после нажатия кнопки "btnSearch" текстовое поле "txtSearch" должно быть "сфокусировано" даже после того, как процесс был инициирован / открыт за пределами главного окна.
Вот мой код:
private void btnSearch_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start("notepad");
txtSearch.Focus(); // not working
}
Какие-либо предложения?
5 ответов
Ниже приведен код, который вам понадобится. Это можно сделать с помощью служб взаимодействия
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();
В вашем событии 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;
}
Приложения не могут "украсть" фокус от других приложений (начиная с Windows XP), самое близкое, чего они могут достичь, - это мигание панели задач, что возможно через P/Invoke:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindow(IntPtr handle, bool invert);
Затем передайте форму Handle
Посмотрите на TabIndex
имущество. Используйте значение 0 на элементе управления, на котором вы должны сосредоточиться при запуске приложения.
Ты пытался
txtSearch.Select ()
txtSearch.Focus()
?
Ваш TextBox находится внутри GroupBox?