2009-07-02 7 views
1

私は空に始まるTreeViewを持っています。イベントのシーケンスは次のとおりです。不思議な、幽霊のような、見つけられないTreeNodeテキスト

  1. 新しいルートノードを追加します。コードはすぐにラベル編集ボックスをポップアップさせ、名前を付けます。
  2. そのルートノードに新しいサブノードを追加します。
  3. 新しいルートノードを最初のノードの後に​​追加します。ラベルの編集ボックスがポップアップし、名前を付けます。

第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の内部構造を壊しているのですか?

答えて

1

私はAfterLabelEditハンドラの最後で

e.CancelEdit = True 

権利を追加し、問題が去っていきました。どうやら私はだったと思っていました。

0

ルートノードに親ノードがないため、e.Nodeに親がある場合はアクションをフィルタリングできます。

+0

しかし、イベントは実際にはルートノードだけで呼び出されています。そうでなければ 'CType'は失敗し、適切なルートノードが変更されています... –