Вопрос

Я использую событие щелчка в 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() возвращает значение null.Это немного раздражает, поскольку узел фактически выбирается при щелчке по изображению, но я не могу узнать, что это за узел.

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Пытаться:

TreeNode node = this.SelectedNode;

РЕДАКТИРОВАТЬ:Побежден Шоном

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top