TreeView перехватывает фокус на Ctrl + клик - PullRequest
4 голосов
/ 20 февраля 2009

У меня есть элемент управления WinForms TreeView, который я хотел бы использовать, чтобы открыть другую форму на основе выбранного узла. Я хочу открыть эту другую форму, когда я нажимаю Ctrl + щелчок по узлу.

В настоящее время это работает так, как мне хотелось бы, если бы я открыл другую форму в обработчике DoubleClick (и, очевидно, дважды щелкнул по узлу); однако, если я использую обработчик Click (или MouseClick) и открываю другую форму при нажатии клавиши Control, она правильно открывает другую форму, но возвращает фокус к исходной форме.

Как мне удержать фокус от возврата к исходной форме (я все еще хочу держать ее открытой) после открытия другой формы? Почему поведение обработчиков Click и DoubleClick различается?

1 Ответ

8 голосов
/ 21 февраля 2009

TreeView возвращает фокус обратно после возврата события. Очень надоедливый. Вы можете использовать хитрость: задержать действие события с Control.BeginInvoke:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
  this.BeginInvoke(new TreeNodeMouseClickEventHandler(delayedClick), sender, e);
}
private void delayedClick(object sender, TreeNodeMouseClickEventArgs e) {
  // Now do your thing...
}

Метод delayedClick запускается, как только все события для TreeView завершаются, и ваша программа бездействует и снова входит в цикл обработки сообщений.

...