だらだらやるよ。

こげつのIT技術メモ

TreeNodeViewでノードの選択時に何らかの処理をしてる場合に注意すること

TreeNodeViewのノード選択時に処理をすることって多いと思います。
ノードが多いことが予想される場合など、動的にツリーを生成したりするのに便利ですよね。
他にも、選択してるノードの詳細をどこかに転記してみたりとか。とか。


通常、ノードの選択時に処理を行う場合は、AfterSelectイベントに処理を書きますよね。
しかしAfterSelectイベントは、ノードが削除されるとき(hogehogeTreeView.Nodes.Clear();が実行されるとき)
でも発生してしまうので、余分にイベントが発生してしまうことになります。

というわけで、普段の選択時とちゃんと区別しましょう、というお話。:-)

つっても例によってコード載せるだけなんですがー

private void hogehogeTreeView_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) {
  if(e.Action != TreeViewAction.Unknown){
    //何か処理hogehogehogehoge
  }
}


とまぁ、こんな感じで
TreeViewAction列挙値には、ByMouse、ByKeybord、Collapse、Expand、Unknownがあります。
他のメソッドなどで自動的に呼ばれた場合はどうやらUnknownが格納されるようです。
なので、それ以外のとき(手動で選択したとき)にだけ処理を実行するようにすればいいかと。