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

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

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

Re[4]: C# ツリービュー・リストビューの使い方について


(過去ログ 71 を表示中)

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

■41367 / inTopicNo.1)  C# ツリービュー・リストビューの使い方について
  
□投稿者/ K.A (1回)-(2009/09/18(Fri) 14:51:41)

分類:[C#] 

C#を学び始めてまだ一カ月の初心者です。
Microsoft Visual C# 2008 Express Editionを使用してプログラムを作成しています。

現在、左側にツリービュー、右側にリストビューを並べ、ツリービューのノードをクリックした際にそのノードの子ノードをリストビューに表示させたいと考えています。参考になるサイトがあればいいのですが、検索しても見つからないため、ここで質問しています。

上記のことを実現させるためには、ツリービューのイベント"NodeMouseClick"の関数に、選択したノードの子ノードを見ていきリストビューに追加するプログラムを書けばいいと考えました。

そこで、this.treeView1.SelectedNode.Nodes[i]をfor文でループさせ、それをリストビューに追加させようとしたのですが、条件文をどう書くかがわかりませんでした。this.treeView1.SelectedNode.Nodes[i] != nullだと思ったのですが、駄目でした。

さらに続けて試行錯誤してみたのですが、よくわからなかったので、とりあえずその関数に
MessageBox.Show(treeView1.SelectedNode.Text);
と書いてどのような挙動をするか見てみたのですが、なぜかメッセージボックスにNodeが1つ遅れて表示されます。

つまり、A、B、Cというノードがある時、はじめにAが選択されている状態で、BをクリックするとメッセージボックスにAが表示され、次にCをクリックするとBが表示されます。まずここでつまずいているようです。

ツリービューとリストビューを並べて使用するサンプルプログラムがあれば一番早いとは思うのですが、なければどのように実現すればいいか教えてください。

あまりにも当たり前な内容を質問しているのかもしれませんが、詳しく説明していただけるとありがたいです。よろしくお願いします。
引用返信 編集キー/
■41369 / inTopicNo.2)  Re[1]: C# ツリービュー・リストビューの使い方について
□投稿者/ επιστημη (2169回)-(2009/09/18(Fri) 15:00:26)
επιστημη さんの Web サイト
> そこで、this.treeView1.SelectedNode.Nodes[i]をfor文でループさせ、それをリストビューに追加させようとしたのですが、条件文をどう書くかがわかりませんでした。

↓選択ノードの子ノードを列挙するパターン

foreach ( TreeNode child in this.treeView1.SelectedNode.ChildNodes ) {
  child に対してなんかする
}

引用返信 編集キー/
■41370 / inTopicNo.3)  Re[1]: C# ツリービュー・リストビューの使い方について
□投稿者/ gtk2k (81回)-(2009/09/18(Fri) 15:20:54)
NodeMouseClickイベントではTreeNodeMouseClickEventArgs型の引数eにNodeプロパティがあるので
このNodeプロパティにクリックされたTreeNodeが渡されます。
ですのでSelectedNodeではなくe.Nodeでやってみてください。
引用返信 編集キー/
■41381 / inTopicNo.4)  Re[2]: C# ツリービュー・リストビューの使い方について
□投稿者/ K.A (2回)-(2009/09/18(Fri) 17:56:48)
2009/09/18(Fri) 18:48:36 編集(投稿者)

No41369 (επιστημη さん) に返信
> > そこで、this.treeView1.SelectedNode.Nodes[i]をfor文でループさせ、それをリストビューに追加させようとしたのですが、条件文をどう書くかがわかりませんでした。
>
> ↓選択ノードの子ノードを列挙するパターン
>
> foreach ( TreeNode child in this.treeView1.SelectedNode.ChildNodes ) {
> child に対してなんかする
> }
>


上記のとおりforeach文を書くと

「'System.Windows.Forms.TreeNode' に 'ChildNodes' の定義が含まれておらず、型 'System.Windows.Forms.TreeNode' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」

というエラーが発生しました。これはどのように解決すればいいのでしょうか?

続けて質問して申し訳ありませんが、よろしくお願いします。
引用返信 編集キー/
■41383 / inTopicNo.5)  Re[2]: C# ツリービュー・リストビューの使い方について
□投稿者/ K.A (3回)-(2009/09/18(Fri) 17:59:16)
2009/09/18(Fri) 18:52:19 編集(投稿者)

No41370 (gtk2k さん) に返信
> NodeMouseClickイベントではTreeNodeMouseClickEventArgs型の引数eにNodeプロパティがあるので
> このNodeプロパティにクリックされたTreeNodeが渡されます。
> ですのでSelectedNodeではなくe.Nodeでやってみてください。


言われた通り、MessageBox.Show(e.Node.Text);に変更したところ、ノードが一つ遅れて表示される問題については解決しました。

ありがとうございました。引き続き、リスト表示の問題についてよろしくお願いします。
引用返信 編集キー/
■41412 / inTopicNo.6)  Re[3]: C# ツリービュー・リストビューの使い方について
□投稿者/ K.A (4回)-(2009/09/19(Sat) 11:52:55)
2009/09/19(Sat) 11:53:37 編集(投稿者)

解決しました。

どうやら、
for (i = 0; i < e.Node.Nodes.Count; i++)
とすればうまくいくようです。

回答ありがとうございました。
引用返信 編集キー/
■41413 / inTopicNo.7)  Re[3]: C# ツリービュー・リストビューの使い方について
□投稿者/ K.A (5回)-(2009/09/19(Sat) 11:53:43)
解決しました。

どうやら、
for (i = 0; i < SelectNode.Nodes.Count; i++)
とすればうまくいくようです。

回答ありがとうございました。
引用返信 編集キー/
■41414 / inTopicNo.8)  Re[4]: C# ツリービュー・リストビューの使い方について
□投稿者/ K.A (6回)-(2009/09/19(Sat) 11:54:03)
No41412 (K.A さん) に返信
> 2009/09/19(Sat) 11:53:37 編集(投稿者)
>
> 解決しました。
>
> どうやら、
> for (i = 0; i < e.Node.Nodes.Count; i++)
> とすればうまくいくようです。
>
> 回答ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -