【C#】【VB.NET】WinFormsのTreeViewで全ての葉ノード(末端)がチェックされているか判定する
TreeViewにおいて、あるノードの持つ全部の葉ノード(末端)がチェックされているか知りたいことがあります。
↑のような3値のチェック状態を持たせられれば、true(✓)かnull(■)かで判定できるのですが、
WinFormsのTreeViewでは不可です。
【参考サイト】
clikington-saito.com
上記サイトのように親がチェック状態なら子のチェックを外せないとする手法もありますが、
ユーザーからすると不便ですね。
そこで、簡易なメソッドを考えたのでここにノートします。
【C#の場合】
public static class ExtensionMethods { /// <summary> /// 全ての葉ノードがチェックされているか判定する拡張メソッド /// </summary> /// <param name="treeNode">TreeNode</param> /// <returns>チェック状態</returns> public static bool AllLeavesChecked(this TreeNode treeNode) { if (treeNode.Nodes.Count == 0) { return treeNode.Checked; } else { bool returns = true; foreach (TreeNode node in treeNode.Nodes) { returns &= node.AllLeavesChecked(); } return returns; } } }
【VB.NETの場合】
Module ExtensionMethods ''' <summary> ''' 全ての葉ノードがチェックされているか判定する拡張メソッド ''' </summary> ''' <param name="treeNode">TreeNode</param> ''' <returns>チェック状態</returns> <System.Runtime.CompilerServices.Extension()> Public Function AllLeavesChecked(treeNode As TreeNode) As Boolean If treeNode.Nodes.Count = 0 Then Return treeNode.Checked Else Dim returns As Boolean = True For Each node As TreeNode In treeNode.Nodes returns = returns And node.AllLeavesChecked() Next Return returns End If End Function End Module