2014-12-11 2 views
3

Я хотел бы программным образом эмулировать щелчок по узлу в элементе управления TreeView. Пока я не вижу метода clickable (что-то corresponding to other controls), и я предполагаю, что мне нужно перейти к выбранному в данный момент узлу.Как программно нажать на узел?

Так что я попытался следующие:

christmasTreeView.SelectedNode. ??? 

Однако IntelliSense не дал мне ни малейшего намека на то, что звонить, чтобы стрелять из Clickety щелкните на узле. Как это можно сделать?

+0

Вам нужно установить 'SelectedNode' на узел, для которого вы хотите эмулировать клик. поэтому это должно быть что-то вроде этого: 'christmasTreeView.SelectedNode = nodeyouwanttoselect'. – Michael

+1

Почему? Чего вы пытаетесь достичь? Вероятно, есть лучший способ ... – t3chb0t

ответ

3

Вы можете сделать что-то вроде:

// find the node you want to select and make it the SelectedNode 
christmasTreeView.SelectedNode = christmasTreeView.Nodes[1]; // <-- the index you need 
// Now trigger a select 
christmasTreeView.Select(); 
// or 
//christmasTreeView.Focus(); 

Это будет огонь:

private void christmasTreeView_AfterSelect(object sender, TreeViewEventArgs e) { 
    // awesome 
} 

Возможный подход (не очень гладкая, хотя).

TreeNode preSelected = ChristmasTreeView.SelectedNode; 
ChristmasTreeView.SelectedNode = null; 
ChristmasTreeView.SelectedNode = preSelected; 
ChristmasTreeView.Select(); 
+0

Жаль, что неясно. Мне нужно эмулировать ** щелчок на узле *. Переключение эквивалентно свертыванию/развертыванию родительского узла. Мне нужно подражать клику на листе (без складывания/разворачивания). Мне нужно запустить метод с помощью подписи * private void treeView1_AfterSelect (Object sender, TreeViewEventArgs eventArgs) *. –

+0

@ KonradViltersten Я отредактировал свой ответ, сделайте снимок. –

+0

Хммм ... Не уверен, если мы пропустим друг друга здесь. В * SelectedNode *, похоже, таких методов нет. Тем не менее, эти методы существуют в * christmasTreeView *. Однако при вызове их не запускается событие, так как метод * private void ChristmasTreeView_AfterSelect (Object sender, TreeViewEventArgs eventArgs) * не останавливается на контрольной точке. Он попадает в breakie, если я физически нажимаю на лист, хотя ... –

0

Вам необходимо использовать обработчик событий для TreeView.NodeMouseClick. Это событие есть параметр, который можно вызвать в вашем EventHandler, как показано ниже:

void MyTreeview_NodeMouseClick(object sender, 
TreeNodeMouseClickEventArgs e) 
{ 
// do something with e.Node 
} 
+0

Это не ответ. Это происходит, когда вы нажимаете на узел. Он не выполняет щелчок. – t3chb0t

+0

О, я пропустил, но подождите, почему он хочет это сделать? Я думаю, он должен предоставить нам дополнительную информацию, чтобы мы могли дать ему некоторое решение, чем щелчок. – MajkeloDev

+0

Как отметил @ t3chb0t, это то, что я уже делаю. Теперь мне нужно сделать это «по требованию» программно. Что касается вопроса о том, почему, я не вижу, как это влияет на ответ на вопрос как. Однако я не ищу обходного пути, поэтому, к сожалению, изменение этого подхода в этом конкретном случае будет недостаточным. –

1

Ваша главная проблема в том, что Windows Forms TreeNode не вытекает из Control как TreeView делает (или, например, Button). Это гораздо ближе к классу «model», что означает, что в первую очередь это касается иерархической организации ваших данных. Хотя некоторые из абстрактных абстракций просачиваются в свойствах, таких как Color, Bounds, Handle и аналогичных, TreeNode не знает, как рисовать себя и как обрабатывать события щелчка.

С другой стороны, TreeView является актуальной Control, то есть вы можете извлечь из него и иметь возможность переопределить его защищенный OnClick метод, как показано на example you linked.

Если вы хотите следовать этому пути, вы можете создать свой производный класс TreeView и переопределить защищенный метод OnNodeMouseClick. Этот метод специфичен для TreeView и вызывается его методом WndProc при щелчке по определенному узлу.

Но, прочитав ваши комментарии к другим ответам, кажется, что это не то, что вам действительно нужно сделать для достижения вашей цели.

+1

Это была отличная информация. Я пропустил это, не было контроля. Вы указали, где я ошибался ** и ** вы также объяснили **, как я обманул. Для анализа это +1. Кроме того, вам нужно изменить свой ник, мат. Это тебе не подходит, хе-хе. Не с ответами вроде этого. –

Смежные вопросы