長いタイトルですが、そのまんまの記事です。

これはBeforeSelectイベントとAfterSelectイベントを補足して新しくTreeNodeが選択されようとしているときにこれまで選択されていたTreeNodeのTagプロパティにテキストデータを保存して、新しくTreeNodeが選択されてしまったあとにTreeNodeのTagプロパティからテキストデータを読み取ってテキストボックスに表示させようとするコードです。

SelectedNode = nullとしたときも当然BeforeSelectイベントとAfterSelectイベントは発生するものと思っていたらそうではないようなのです。

ボタンをクリックするとどこも選択されていない状態になりますが、BeforeSelectイベントもAfterSelectイベントも確認できません。

それからすでに選択されている部分が削除されるとTreeNodeがすべて削除された場合以外は別のどこかが選択されている状態になります。そのためこの場合はBeforeSelectイベントとAfterSelectイベントは発生します。

「別のどこか」とはどこでしょうか? 削除されたTreeNodeにNextNodeが存在する場合はNextNodeが自動的に選択されます。存在しない場合はPrevNodeが存在する場合はPrevNodeが選択されます。それも存在しない場合はParentが存在する場合はParentが選択されます。それも存在しないときはTreeNodeが削除されることですべてのTreeNodeが削除された場合です。