私は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. VB TreeView - 特定のノードのパスのみを展開します。
- 2. TreeViewのみいくつかのノードを展開する
- 3. VB.Netバインディングナビゲータで保存されたDataView
- 4. TreeViewで展開された項目の位置を変更する
- 5. ノードを削除した後にツリーノートが展開されない
- 6. フィルタリングされたノードを展開していないAngularJSフィルタ
- 7. 保存されたファイルなしでTreeViewにXmlDataSourceを設定する
- 8. c#winform:node TreeViewで展開と折りたたみを行う
- 9. jQueryツリービュープラグイン崩壊/新しく追加されたノードに展開
- 10. QTreeWidgetの展開されたノードを反復する
- 11. ノード展開サーバー
- 12. VB.Net TreeViewでノードを更新する方法NodeMouseClick
- 13. IntelliJ IDEAで展開されたマルチモジュールプロジェクトを展開する
- 14. 開かれたファイルを使用してvb.netのファイルダイアログを保存する
- 15. 共有ポイントの展開中にリストデータを保存します。
- 16. XAMLでTreeViewを保存する
- 17. D3.js:ノードnまでツリーを展開
- 18. 展開された文字列に文字列を展開します
- 19. VB.NET Windowsフォームアプリケーションの展開
- 20. VB.Net SQLExpress 2008の展開
- 21. VB.Netを使用してAccessデータベースを展開するが、データベースは展開されない
- 22. TreeViewの選択されたノードに対する新しいノードの追加
- 23. Weblogic 12c展開されたWarファイルを展開する
- 24. Django:アップロードされたファイルをメモリに保存したまま開く。フォームクリーンメソッドでは?
- 25. Cytoscapeでノードを展開する
- 26. ノードが更新されず、ノード保存がスキップされる
- 27. データベースから塗りつぶされたTreeViewのノードを削除します。
- 28. 分離されたスレッドからTreeViewノードの前景色を変更します
- 29. WPFでTreeNodeを展開するときにTreeViewの深さを制限する
- 30. ドロネー展開されたリーフレットタイルレイヤー
いくつかの方法があります。 MySettingsは、binaryformatterを使用してファイルに保存します。データベースは、このデータをどのように保存して元に戻すかはあなた次第です。 – Codexer
私は、この問題をトピックではなく、プログラミングの問題に特化しているわけではないので、閉じることにしました。 – Codexer