C# TreeViewについて

このQ&Aのポイント
  • C#でTreeViewを使用して上記のような階層構造を表示する方法について教えてください。
  • TreeViewを使ってC#で階層構造を表示する方法を教えてください。
  • C#で文字列からTreeViewの階層構造を作成する方法を教えてください。
回答を見る
  • ベストアンサー

C# TreeViewについて

親 親/子1 親/子1/子2 親/子1/子3 親/子1/子3/子4 親/子1/子3/子4/子5 親/子6 親/子6/子7 親/子6/子8 と言うような文字列を上から一行ずつ読み込んで 親 |- 子1 |   |- 子2 |   |- 子3 |       |- 子4 |           |- 子5 | |- 子6 |   |- 子7 |   |- 子8 みたいな感じで TreeViewに表示させたいのですがどのように書けば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

↓のプログラムは VB のものですが参考になると思います。 http://okwave.jp/qa/q6688609.html

tanakaxld
質問者

お礼

ありがとうございます。上手く出来ました。 private void button1_Click(object sender, EventArgs e) { System.IO.StreamReader sr = new System.IO.StreamReader("TEST.txt", System.Text.Encoding.GetEncoding("shift_jis")); string line = null; line = sr.ReadLine(); while (line != null) { AddPath(line); line = sr.ReadLine(); } sr.Close(); } private void AddPath(string line) { string[] paths = line.Split(new char[] { '/' }); TreeNodeCollection nc = this.treeView1.Nodes; TreeNode n = default(TreeNode); for (int i = 1; i <= paths.Length - 1; i++) { TreeNode[] ns = nc.Find(paths[i], false); if (ns.Length == 0) { n = nc.Add(paths[i], paths[i]); } else { n = ns[0]; } nc = n.Nodes; } }

関連するQ&A

  • C# treeviewについて

    VS2017で独学でC#を勉強しています。 treeviewでエクスプローラのようにドライブを表示する方法を教えてください。 それとtreeviewで検索しているとノードという単語がでてきます。 これは何のことでしょうか? treeviewにこだわっているわけではなく、エクスプローラのように表示する方法でしたらなんでもいいです。 よろしくお願いします。

  • 【C#】TreeViewでクリックした親ノードと、子ノードを表示させた

    【C#】TreeViewでクリックした親ノードと、子ノードを表示させたい C#初心者です。 TreeView(treeView1)で親ノードをクリックしたら、その親ノード+子ノードを、別のTreeView画面(treeView2)に表示させたいのですが、やり方がわかりません。 例えば、 +A  -B  -C +D  -E というTreeViewの場合、Aの親ノードをクリックしたら、Aの親ノードと、BとCの子ノードが、別画面(treeView2)に表示されるようにしたいです。 どなたか分かる方いらっしゃいましたら教えていただけると幸いです。 宜しくお願いいたします。

  • TreeViewについて

    TreeViewを使う場合、その管理情報(親ノードのIDとかKeyとか。。子ノードの情報とか、、)をテーブルに保存しておくと便利な気がするのですが、TreeViewを使う場合の基本(テーブル作成時)みたいなのを教えてもらえませんでしょうか?

  • C# TreeViewのノードの判定

    TreeViewでクリックしたノードの位置が親ノード(+の位置)かそれとも配下の子ノード なのか判定することはできますでしょうか。

  • .NetのTreeViewの使い方について

    TreeView配下にTreeNodeを作成・表示した際に、ノードをクリックすると自動的にリバース表示されますが、これを止めることはできないでしょうか。 TreeView1   -Node0      -Node01      -Node02      -Node03   -Node1      -Node11      -Node12 のようになっているとき、たとえばNode01がクリックされたらNode0,Node01,Node02,Node02のすべてのForeColorをColor.Redにするなどして、まとまりのあるものとして認識させたいのですが、リバース表示が邪魔です。TreeViewやNodeのプロパティ、メソッドも調べてみましたが、それらしいものがありません。 OS:Windows7 (Home) 言語:VisualStudio 2010(VidsualBasic) よろしくお願いいたします。

  • Treeviewのnodeについて

    お世話になります。 C#2005で開発をしております。 Treeviewに関してのご質問をさせていただきます。 Treeviewのnodeの一つを、enable=falseにしたいと考えております。 しかしながら、Treeviewにプロパティがありません。 enabel=falseに相当するプロパティがあれば、ご教示いただければ幸いに存じます。 現状は、Treeviewのnodeの一つの文字色を変更する方法で考えておりますが、 何かよい方法があればと思いご質問させていただきました。 恐れ入りますが、ご回答いただければ幸いに存じます。

  • TreeViewコントロールについて

    VB2005環境です。 TreeViewコントロールを作成し、ノードごとにクリックイベントを 追加して、タブコントロールを呼び出すようにしたいと考えています。 (親ノードをクリックしたら、親ノード用のタブコントロールが 画面に表示され、さらに子ノードAをクリックすると、ノードA用の タブコントロールが表示される、ノードBをクリックすると…という具合に)。 NodeMouseClickイベントを使えば良いのかとは思うのですが、クリックイベントが 子ノード各々ごとに取得できず困っています。 やり方を教えていただけないでしょうか? 更に、そこから各々専用のタブコントロールを呼び出す方法も 教えていただけるとありがたいです。 よろしくお願いします。

  • VB2008.netのTreeViewについて質問です。

    VB2008.netのTreeViewについて質問です。 質問させて頂きます。 VB2008で作業をしています。 TreeViewで子ノードを選択します。 この時、選択されている子ノードの、親ノードを取得したいのですが 方法がわかりません。 わかる方教えていただけないでしょうか。

  • TreeViewについて

    いつも大変お世話になっております。福島です。 TreeViewのことで教えて頂きたいのですが・・・ 社員登録で3階層(部・課・社員)のツリー構造をなす TreeViewを作成しましたが、1社員の情報を変更したときに 状態を反映するためにTreeView全体を消去してから書き直しています。 (例えば)課や部を移動したとき しかし表示する数が多くなってきた為に再構築に非常に時間が かかってしまい実用的でなくなってしまいました。 あるノードの下だけ変更(削除)する方法はありますか? 今は、「treeView.Nodes.Clear」を使用して全体を削除して 再度ツリーを作成しています。 aNode(部) bNode(課) cNode(社員) のようになっています。 宜しくお願い申し上げます。 Windows2000SP2 + VB6.0SP4

  • C# TreeView 効率良いノード追加の仕方

    C# TreeViewについて質問させてください。 ノード(子ノード含む)を数万件以上登録する際に、効率の良い方法を教えて頂けないでしょうか? 実際のコードとは異なりますが、大まかに以下のような処理をメインスレッドで行っています。 class MyTreeNode : TreeNode{   void AddNode(){     BeginUpdate();     SuspendLayout();     foreach( var 親ノード情報 in 親ノード情報リスト ){       TreeNode parentNode = new TreeNode( 親ノード名 );       foreach( var 子ノード情報 in 子ノード情報リスト ){         TreeNode childNode = new TreeNode( 子ノード名);         parentNode.Nodes.Add( childNode );       }       this.Nodes.Add( parentNode );     }     ResumeLayout();     EndUpdate();   } } この方法ですと、かなり時間がかかってしまい、UIが固まったようになってしまいます。 (TreeViewに、子ノードの一斉展開機能が必要なので、親ノード展開時のイベントを拾って  子ノードを追加する方法は上記と同じく遅くなってしまうのではと思っていますがどうなんでしょうか?)

専門家に質問してみよう