2009-02-20 4 views
3

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

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

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

ответ

7

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 завершения работы и программа переходит в режим ожидания и вновь входит в цикл сообщений.

+0

Спасибо! Отличный совет. Теперь работает так, как хотелось бы. – 2009-02-25 13:23:04