Проблема C# TreeView.GetNodeAt() с нажатием изображений
Вопрос
Я использую событие щелчка в 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;
РЕДАКТИРОВАТЬ:Побежден Шоном