私は空に始まるTreeViewを持っています。イベントのシーケンスは次のとおりです。不思議な、幽霊のような、見つけられないTreeNodeテキスト
- 新しいルートノードを追加します。コードはすぐにラベル編集ボックスをポップアップさせ、名前を付けます。
- そのルートノードに新しいサブノードを追加します。
- 新しいルートノードを最初のノードの後に追加します。ラベルの編集ボックスがポップアップし、名前を付けます。
第2のルートノードは新しい名前を使用しますが、手順2で追加したサブノードも同じです。今、それはではありません。実際にはのサブノードのテキストです。デバッガでTreeNodeを調べると、サブノードに適切なテキストが表示されます。しかし、ルートノードに入力されたテキストは、何か他のことが起こり、ツリーを再構築する必要があるまで、その親ノードを展開したり折り畳んだりすることによって回避されます。
私は奇妙な方法でツリーを構築しています。親からすべてのルートノードを削除し、ルートからすべての子ノードを削除し、すべてのタグとテキストを更新し、新しいノードを作成してから、彼らの親は - しかし、私はチェックし、適切なテキストが適切なノードに関連付けられている。間違ったテキストを表示しているTreeNodeは、1つのオブジェクトをモデル化しただけで、Textプロパティに他に何も含まれておらず、親に再追加される直前にテキストが適切な値(「無題アクション」)ノード。
私は犯人のための考えることができるすべては、MSDNのサンプルに基づいてラベル編集ボックス、用のコードです:
Private Sub EditSelectedCategoryName()
If Not ActionList.SelectedNode.IsEditing Then
ActionList.LabelEdit = True
ActionList.SelectedNode.BeginEdit()
End If
End Sub
Private Sub ActionList_AfterLabelEdit(ByVal sender As Object, ByVal e As NodeLabelEditEventArgs) Handles ActionList.AfterLabelEdit
If e.Label IsNot Nothing Then
e.Node.EndEdit(False)
CType(e.Node.Tag, ImportActionCategory).DisplayName = e.Label
Else
e.Node.EndEdit(True)
End If
ActionList.LabelEdit = False
End Sub
EditSelectedCategoryName
は、右の後、コンテキストメニュー項目のClickイベントによって呼び出されます新しいルートノードが追加され、選択されたノードになります。 AfterLabelEditイベントハンドラのDisplayName
セッターは、ツリーを再構築する別の一連のイベントをトリガします。だから、AfterLabelEditイベントでその内容を変更して、TreeViewの内部構造を壊しているのですか?
しかし、イベントは実際にはルートノードだけで呼び出されています。そうでなければ 'CType'は失敗し、適切なルートノードが変更されています... –