C # TreeView.GetNodeAt () проблема с нажатием изображения - PullRequest
2 голосов
/ 24 марта 2009

Я использую событие click в TreeView, чтобы делать некоторые вещи, когда узел нажимается в TreeView. Я делаю это, получая узел, на который нажимают, вызывая GetNodeAt () с координатами мыши, например:

private void TreeView_Click(object sender, System.EventArgs e)
{
    MouseEventArgs mouseEventArgs = e as MouseEventArgs;

    if (mouseEventArgs == null)
        return;

    // Get the node that is being clicked.                  
    TreeNode node = this.GetNodeAt(mouseEventArgs.X, mouseEventArgs.Y);

    // Do other stuff...
}

Однако метод GetNodeAt () работает только тогда, когда щелчок находится на метке узла, когда щелкается изображение узла, тогда GetNodeAt () возвращает ноль. Это немного раздражает, так как узел фактически выбирается при нажатии на изображение, но я не могу выяснить, что это за узел.

У кого-нибудь есть предложения?

Обновлено: Вместо этого я получил несколько предложений по использованию SelectedNode. Я не могу, так как это установлено после того, как событие Click запущено. Это на самом деле в элементе управления, который наследует TreeView и запускает собственное событие Clicked, но с базовыми данными, которые TreeNode представляет вместо самого TreeNode.

Обновлено: выясняется, что кто-то переопределил метод GetNodeAt () в нашем коде, который ввел это поведение, которое я не осознавал. Таким образом, вопрос является недействительным и нет проблем с методом GetNodeAt (). Почему кто-то сделал это, остается загадкой. :)

Ответы [ 3 ]

4 голосов
/ 24 марта 2009

Вы пробовали события До выбора или После выбора? Вы можете получить выбранный узел прямо из TreeViewCancelEventArgs, а затем использовать его в своем событии Click.

Редактировать: Дополнительная мысль. Единственная проблема, с которой я могу столкнуться, заключается в том, что событие BeforeSelect фактически вызывает после событий Click и MouseClick.

Другое редактирование: если вам нужно событие, которое срабатывает перед щелчком, вы можете использовать NodeMouseClick - TreeNodeMouseClickEventArgs имеет свойство Node.

2 голосов
/ 24 марта 2009

Почему бы просто не использовать TreeView.SelectedNode?

0 голосов
/ 24 марта 2009

Попробуйте:

TreeNode node = this.SelectedNode;

РЕДАКТИРОВАТЬ: избит Шоном

...