Как сделать фокус кнопки в потоке в C # - PullRequest
2 голосов
/ 04 мая 2009

Мне нужно сделать фокус кнопки в конце потока. Метод Button.Focus (), похоже, не работает.

для примера:

Button1_Click(object sender, EventArgs e)
{
   Thread myThread = new Thread(theThread);
   myThread.Start();
}

theThread()
{
  ... 
  Button2.Focus(); // does not seem to focus the button
}

Однако, если я помещу Button2.Focus () в Button1_Click, он будет фокусироваться, но для моего проекта я не смогу этого сделать.

Ответы [ 2 ]

3 голосов
/ 04 мая 2009

Для общего решения подобных проблем взгляните на класс SyncronizationContext. Однако для форм Windows вы можете использовать метод Invoke, а в WPF вы можете использовать Dispatcher.Invoke:

//WinForms:
Invoke(delegate{ Button2.Focus(); });
1 голос
/ 04 мая 2009

Любые изменения пользовательского интерфейса должны быть сделаны из основного потока формы. Посмотрите на вызов метода "Invoke" формы из вашего собственного потока. Вы захотите передать «Invoke» делегат методу, который вызывает метод «Focus» на вашей кнопке.

...