C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 選択されている親ノードの子ノード全てを取得するには?


(過去ログ 125 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■74712 / inTopicNo.1)  選択されている親ノードの子ノード全てを取得するには?
  
□投稿者/ C#初心者 (1回)-(2015/01/25(Sun) 22:18:19)

分類:[C#] 

ツリービューにて、
下記のようなコードがあったとします。
このときに、ツリービュー上でノードを選択した場合に、
選択したノードの子ノード全てを取得するには
treeView1_AfterSelectイベントでどのように処理したらよいのでしょうか?

どなたか分かるかた教えてください。
よろしくお願いします。

=====================================
尚、次のようなツリー表示になっていす。
食べ物
ー野菜
ーーキャベツ
ー果物
ーーバナナ
ー魚
ーー鮭
ーーぶり

魚を選択した場合には、鮭、ぶり

果物を選択した場合には、バナナ

食べ物を選択した場合には、
野菜、キャベツ、果物、バナナ、魚、鮭、ぶり

といった様に取得したいです。
=====================================

コード
=====================================
treeView1.Nodes.Clear();

TreeNode rootNode = new TreeNode();
TreeNode childNode1 = new TreeNode();
TreeNode childNode2 = new TreeNode();
TreeNode childNode3 = new TreeNode();

TreeNode grandChildNode1 = new TreeNode();
TreeNode grandChildNode2 = new TreeNode();
TreeNode grandChildNode3 = new TreeNode();
TreeNode grandChildNode4 = new TreeNode();


//親ノードの作成
rootNode.Text = "食べ物";

//子ノードの作成
childNode1.Text = "野菜";
childNode2.Text = "果物";
childNode3.Text = "魚";

//孫ノードの作成
grandChildNode1.Text = "キャベツ";
grandChildNode2.Text = "バナナ";
grandChildNode3.Text = "鮭";
grandChildNode4.Text = "ブリ";

//親ノードをTreeViewに追加
treeView1.Nodes.Add(rootNode);

//子ノードを親ノードに追加
rootNode.Nodes.Add(childNode1);
rootNode.Nodes.Add(childNode2);
rootNode.Nodes.Add(childNode3);
//子ノードを孫ノードに追加
childNode1.Nodes.Add(grandChildNode1);
childNode2.Nodes.Add(grandChildNode2);
childNode3.Nodes.Add(grandChildNode3);
childNode3.Nodes.Add(grandChildNode4);
=====================================
引用返信 編集キー/
■74713 / inTopicNo.2)  Re[1]: 選択されている親ノードの子ノード全てを取得するには?
□投稿者/ Azulean (419回)-(2015/01/25(Sun) 23:26:53)
何も考えずに作るとこんな感じですかね。
「再帰」という言葉を調べてみてください。

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    List<TreeNode> childNodes = GetChildNodes(e.Node);
    Text = string.Join(",", childNodes);
}

private List<TreeNode> GetChildNodes(TreeNode targetNode)
{
    List<TreeNode> list = new List<TreeNode>();
    foreach (TreeNode node  in targetNode.Nodes)
    {
        list.Add(node);
        list.AddRange(GetChildNodes(node));
    }
    return list;
}

// 文字列だけで良いなら TreeNode 自身を追加するのではなく、string 型の Text プロパティを追加する感じ。

引用返信 編集キー/
■74716 / inTopicNo.3)  Re[2]: 選択されている親ノードの子ノード全てを取得するには?
□投稿者/ タカ (3回)-(2015/01/26(Mon) 00:04:22)
No74713 (Azulean さん) に返信
> 何も考えずに作るとこんな感じですかね。
> 「再帰」という言葉を調べてみてください。
>
> private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
> {
> List<TreeNode> childNodes = GetChildNodes(e.Node);
> Text = string.Join(",", childNodes);
> }
>
> private List<TreeNode> GetChildNodes(TreeNode targetNode)
> {
> List<TreeNode> list = new List<TreeNode>();
> foreach (TreeNode node in targetNode.Nodes)
> {
> list.Add(node);
> list.AddRange(GetChildNodes(node));
> }
> return list;
> }
>
> // 文字列だけで良いなら TreeNode 自身を追加するのではなく、string 型の Text プロパティを追加する感じ。


Azuleanさんありがとうございます。

再帰勉強になりました
ありがとうございます。

下記のコードで思うような結果が出せました。

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
List<String> childNodes = GetChildNodes(e.Node);
for (int i = 0; i <= childNodes.Count - 1; i++)
{
MessageBox.Show(childNodes[i]);
}
}

private List<TreeNode> GetChildNodes(TreeNode targetNode)
{
List<String> list = new List<String>();
foreach (TreeNode node in targetNode.Nodes)
{
list.Add(node.Text);
list.AddRange(GetChildNodes(node));
}
return list;
}



解決済み
引用返信 編集キー/
■74717 / inTopicNo.4)  Re[3]: 選択されている親ノードの子ノード全てを取得するには?
□投稿者/ Azulean (420回)-(2015/01/26(Mon) 00:19:22)
No74716 (タカ さん) に返信

質問者ご本人でしょうか。
別に名前を使い分けるなとは言いませんが、同じスレッド内では同じ名前を使ってください。
(類似の質問をしている時点で察することはできるのですが…)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -