web-dev-qa-db-ja.com

C#4.0を使用してTreeViewで選択したすべてのチェックボックスノード名を取得するにはどうすればよいですか?

C#WindowsフォームベースのアプリケーションにCheckBoxを備えたTreeViewがあります。ユーザーは、ノードのチェックボックスをクリックしてアイテムを選択します。ユーザーがgetselectedlistボタンをクリックするたびに、選択したチェックボックスのノード名を取得したいのですが、どうすればよいですか?.

この問題から抜け出すために私を導いてください...

11
Saravanan

単純な再帰関数を使用できます。

List<String> CheckedNames( System.Windows.Forms.TreeNodeCollection theNodes)
{
    List<String> aResult = new List<String>();

    if ( theNodes != null )
    {
        foreach ( System.Windows.Forms.TreeNode aNode in theNodes )
        {
            if ( aNode.Checked )
            {
                aResult.Add( aNode.Text );
            }

            aResult.AddRange( CheckedNames( aNode.Nodes ) );
        }
    }

    return aResult;
}

YourTreeView.Nodesで使用するだけです

23
Allender

または、何かがチェックされるたびにTreeViewのすべてのノードを再帰的にループする代わりに、私のようにリストに数百または数千のアイテムがあり、チェックされるアイテムが20を超えない場合、コストがかかる可能性があります。

FullPath文字列のみが必要だったので、チェック/チェック解除後に文字列リストに追加/削除しますが、必要に応じて、TreeNodeのコレクションを同じ方法で使用することもできます。

public partial class Form1 : Form
{
    List<String> CheckedNodes = new List<String>();

    public Form1()
    {
        InitializeComponent();
    }

    private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
    {
        if (e.Node.Checked)
        {
            CheckedNodes.Add(e.Node.FullPath.ToString());
        }
        else
        {
            CheckedNodes.Remove(e.Node.FullPath.ToString());
        }
    }
}
11
Brett Wait
    //Uncomplicated, reliable method
    List<int> _valueList = new List<int>();
    private List<int> getCheckedNodes(TreeNodeCollection _parentNodeList)
    {
        foreach (TreeNode item in _parentNodeList)
        {
            if (item.Checked)
            {
                _valueList.Add(Convert.ToInt32(item.Value));
            }

            if (item.ChildNodes.Count > 0)
            {
                //.NET does not forget where it stayed.
                getCheckedNodes(item.ChildNodes);
            }
        } 

        return _valueList;
    }
1
Hakkı Eser

ボタンクリックイベントでは、 http://msdn.Microsoft.com/en-us/library/wwc698z7.aspx で説明されているように、ツリー全体を反復処理できます。次に、TreeNodeごとに、チェックボックスがオンになっているかどうかを確認できます。チェックボックスがオンになっている場合は、その名前をリストに追加できます。

1
Haris Hasan