Это невозможно. Событие AfterSelect
больше не будет вызываться, потому что выбранный узел уже выбран. Выбор не меняется , поэтому событие не будет инициировано.
Как указывает Ганс в комментарии к исходному вопросу, весьма вероятно, что плохой дизайн пользовательского интерфейса ожидает, что пользователь поймет, что повторное нажатие на уже выбранный узел будет иметь некоторый эффект. Лучшее решение - добавить функциональность «Обновить» в ваше приложение. Обычно это сопоставляется клавише F5 и / или сочетанию клавиш Ctrl + R .
Если вам абсолютно необходимо инициировать какое-либо действие, когда узел перевыбран , вам нужно обработать его на более низком уровне, чем событие AfterSelect
. А это означает, что нужно выяснить, на каком узле пользователь щелкнул вручную. Для этого обработайте событие MouseDown
и используйте метод HitTest
, чтобы определить узел в том месте, где пользователь щелкнул. Это не красиво, и я не рекомендую это, но это сделает работу.
private void myTreeView_MouseDown(object sender, MouseEventArgs e)
{
TreeViewHitTestInfo info = myTreeView.HitTest(e.X, e.Y);
// Ensure that the user actually clicked on a node (there are lots of areas
// over which they could potentially click that do not contain a node)
if ((info.Node != null) && (info.Node == myTreeView.SelectedNode))
{
// The user clicked on the currently-selected node,
// so refresh the TreeView
// . . .
}
}