私はTreeViewを含むVB.netでフォームを作成しています。このツリービューには、展開可能な親ノードと対応する子ノードが設定されます。ユーザーがプログラムを実行すると、必要なノードを展開できます。どのノードが展開されたのかをプログラムで保存する方法はありますか?次回にフォームがロードされると、それらのノードは展開されたままになりますか?私は必ずしもコード化された例は必要ではないが(有用であるかもしれないが)、プログラムで使うコマンド/コントロール/ロジックの一般的なアイデア。前もって感謝します!ここでVb.net TreeViewで展開されたノードを保存します。
答えて
は、あなたの実装を導くために、いくつかの基本的な考え方です:
現在展開されているノードを追跡するためにリストを作成します。
Private _ExpandedNodeList As New List(Of String)
セットアップ2つのイベントハンドラAfterCollapseを追跡し、 TreeViewのAfterExpandイベントは、ユーザーがツリーの別の部分を開いたり閉じたりするときに発生します。ここでのトリックは、イベントハンドラがツリーを構築したときにノードに設定した文字列であるNodeのタグ値を追加して削除するだけです。
Private Sub TreeView_AfterCollapse(sender As Object, e As TreeViewEventArgs) Handles TreeView.AfterCollapse
If _ExpandedNodeList.Contains(e.Node.Tag.ToString) Then
_ExpandedNodeList.Remove(e.Node.Tag.ToString)
End If
End Sub
Private Sub TreeView_AfterExpand(sender As Object, e As TreeViewEventArgs) Handles TreeView.AfterExpand
If Not _ExpandedNodeList.Contains(e.Node.Tag.ToString) Then
_ExpandedNodeList.Add(e.Node.Tag.ToString)
End If
End Sub
ここでは、アプリケーション内で、TreeViewを特定の状態に復元する必要があるとします。 TreeViewでノードを再帰的に処理し、リスト内のノードでExpandを呼び出すことができます。私の実装では、このようになります
:
Private Sub ShowVisibleNodes()
Dim Node As TreeNode
For Each ExpandedChildNodeName As String In _ExpandedNodeList
For Each RootNode As TreeNode In TreeView.Nodes
Node = NodeFromTagName(ExpandedChildNodeName, RootNode)
If Node IsNot Nothing Then
Node.Expand()
End If
Next
Next
End Sub
Private Function NodeFromTagName(ByVal NodeTagName As String, NodeToSearch As TreeNode) As TreeNode
Dim NextNode As TreeNode
'check input node
If NodeToSearch.Tag IsNot Nothing Then
If NodeToSearch.Tag.Equals(NodeTagName) Then
Return NodeToSearch
End If
End If
'check child nodes and recurse on intermediary nodes
For Each Node As TreeNode In NodeToSearch.Nodes
If Node.Tag IsNot Nothing Then
If Node.Tag.Equals(NodeTagName) Then
Return Node
End If
NextNode = NodeFromTagName(NodeTagName, Node)
If NextNode IsNot Nothing Then
Return NextNode
End If
End If
Next
Return Nothing
End Function
(注)このコードは、アプリケーション内にドロップするだけで動作することが保証されていません。
少なくとも、ツリーの構築と各TreeNodeのタグに値を設定するかどうかについては、注意深く考える必要があります。
これがうまく始めるでしょう。
うわー、本当にありがとう!そして、私が 'ExpandedNodesList'をビルドするとき、これが保存され、次回ユーザがアプリケーションを起動するときに利用可能になりますか? –
あなたは間違いなくリストを保存することができますが、自分でそれを行う必要があります。たとえば、アプリケーションが終了すると、テキストファイルに書き出すことができます。または、System.Runtime.Serialization名前空間を参照してください。 –
私は 'save'をファイルに保存すると解釈しなかったので、ここでdownvoteがあると思いますが、 'save'は 'somewhere safe'として解釈しますか? Vive le pedantry、ハァッ! –
- 1. TreeViewのみいくつかのノードを展開する
- 2. VB.Netバインディングナビゲータで保存されたDataView
- 3. TreeViewで展開された項目の位置を変更する
- 4. フィルタリングされたノードを展開していないAngularJSフィルタ
- 5. 保存されたファイルなしでTreeViewにXmlDataSourceを設定する
- 6. jQueryツリービュープラグイン崩壊/新しく追加されたノードに展開
- 7. QTreeWidgetの展開されたノードを反復する
- 8. c#winform:node TreeViewで展開と折りたたみを行う
- 9. VB.Net TreeViewでノードを更新する方法NodeMouseClick
- 10. IntelliJ IDEAで展開されたマルチモジュールプロジェクトを展開する
- 11. 共有ポイントの展開中にリストデータを保存します。
- 12. 開かれたファイルを使用してvb.netのファイルダイアログを保存する
- 13. D3.js:ノードnまでツリーを展開
- 14. XAMLでTreeViewを保存する
- 15. 展開された文字列に文字列を展開します
- 16. VB.Net SQLExpress 2008の展開
- 17. TreeViewの選択されたノードに対する新しいノードの追加
- 18. Django:アップロードされたファイルをメモリに保存したまま開く。フォームクリーンメソッドでは?
- 19. データベースから塗りつぶされたTreeViewのノードを削除します。
- 20. TreeView強制親ノードがチェックされる
- 21. WPFでTreeNodeを展開するときにTreeViewの深さを制限する
- 22. TreeViewからノードを削除します
- 23. VB.NET保存/ロードリストボックス
- 24. WinrtXamlToolkit TreeViewダブルクリックではなくシングルで展開する
- 25. CloudKitの非公開で保存されたデータは、ユーザーのiCloudアカウントに保存されていますか?
- 26. Python - Tkinterで保存されたPSイメージ - 開けません。
- 27. jsTreeノードは展開/折りたたみを行いません。
- 28. jsTree:名前でノードを展開
- 29. ブラウザのストレージにtreeviewメニューの状態を保存します。
- 30. cmd prompt in vb.net treeview
いくつかの方法があります。 MySettingsは、binaryformatterを使用してファイルに保存します。データベースは、このデータをどのように保存して元に戻すかはあなた次第です。 – Codexer
私は、この問題をトピックではなく、プログラミングの問題に特化しているわけではないので、閉じることにしました。 – Codexer