Ваша проблема связана с тем, что OnNodeMouseClick
запускается перед любыми событиями, связанными с выбором (OnBeforeSelect
& OnAfterSelect
), что означает, что проверяемый вами SelectedNode
еще не обновлен.
Если вас интересует только изменение выбора , подпишитесь на BeforeSelect
(с возможностью отмены выбора) или AfterSelect
, Это также будет обрабатывать изменения выбора с помощью клавиатуры.
В отличие от событий, связанных с выбором, NodeMouseClick
все равно будет срабатывать, даже если выбранный узел не изменяется (например, вы щелкаете по уже выбранному узлу). Кроме того, как следует из названия, это работает только при щелчке мышью и , а не при использовании клавиатуры для навигации по дереву.
Чтобы увидеть, что на самом деле происходит в фоновом режиме, вы можете взглянуть на исходный код TreeView, в частности, метод WmNotify . Вы увидите, что NodeMouseClick
запускается сообщением Windows NM_CLICK
. Затем он выполняет проверку попадания по координате (x, y), по которой щелкают, чтобы найти узел под мышью, и, если он найден, возвращает его вам внутри аргумента TreeNodeMouseClickEventArgs
события.
TLDR: при подписке на NodeMouseClick
ваш выбор еще не изменился (и, возможно, он не меняется), но вы можете увидеть узел, на который нажали, проверив аргумент события. Работает только при использовании мыши, а не клавиатуры.