【C#】【VB.NET】WinFormsのTreeViewで全ての葉ノード(末端)がチェックされているか判定する

TreeViewにおいて、あるノードの持つ全部の葉ノード(末端)がチェックされているか知りたいことがあります。

f:id:ktts:20200204233155p:plain
↑のような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