• ベストアンサー

ツリービューの使い方が・・・

TAGOSAKU7の回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

Addの文を見てください。 最初にAddしている「会社」以外はtvwChildが、引数に渡されています。 実行してみると、会社にぶら下がります。 それぞれのアイテムが、何にぶら下がっているかを注目してください。 そして各パラメータ値と対比させて見るようにしてください。 tvwChild は 宣言しないでもリストビューのコントロールが使用できるのであれば、リストビューを作成するライブラリに宣言されているので、特にプログラム内部での宣言は必要ありません。 ちなみにtvwChild = 4です。 この部分でエラーが起こるようであれば、もう一度コンポーネントを見直しましょう。 MSDNはネットにもあります。 http://www.microsoft.com/japan/developer/default.asp 「ツリー ビュー (TreeView) コントロールの使い方ツリー ビュー (TreeView) コントロールの使い方」 上記のカギカッコ内の文字列をキーにして、検索をしてみてください。 あのサンプル以上にわかりやすく説明することは、ちょっと無理です。。。 >新しいMSDNライブラリにはその部分が抜けているのではないか(リストにない)という結論に至った そんなことはないと思うのですが。。。貼り付けたコントロールをクリックしアクティブ状態にして、[F1キー]を押したら、よほどマイナーなコントロールでない限り、そのコントロールのヘルプが出ます。 それはご存知ですか? 勉強方法はいろいろありますが、主にサンプルがあったときは、それをコピってプロジェクトを作成し、いろいろ改造してみることが必要です。さっきのサンプルをいろいろ改造してみましたか? もめる気はないですが、、、 あなたの気持ちもわからないではないけど、あの書き込みからはTodoさんが言うのも最もな気がします。 >初心者っぽい質問で申し訳ないのですが、 本当は自分は初心者ではないと言っているように聞こえます。 >プロセスとプロセスがもっているスレッドを、・・・・ やっていることは、VBをする人の中で、高度なことです。それをすでにしていますね。 このことから、それまでの過程がよくわからないので、言語上級者がヘルプを調べるのが面倒になって回答を求めてるようにとることもできます。 もう一度言いますが、、、もめる気はありません。。。 しかし僕自身もプロセスやスレッドの概念を持った方であれば、あのサンプルを調査したら理解できるように思います。 とりあえず、改造を行ってみて、どういう風にわからないかを指摘してもらえれば、それなりの回答を得られると思います。

haporun
質問者

お礼

すみません。 tvwChildが定数だとは気が付きませんでした。 オブジェクトブラウザはかなりのぞいたんですが、定数までは気が回りませんでした。 オブジェクトブラウザでのメソッドのプロトタイプがバリアント型だったので、何型がわからなかったのです。 >高度なことです プロセスとスレッドをクラスにしたり・・・。 自分でもコアなことやってると思ってます。 さて、知識も付いてきたことだし、そろそろ実用的なプログラムを作ろうかと思ったら、インターフェース部分の知識が極端に抜けてまして。 最近どうも、インターフェースを作るのが後回しになって、結局内部だけ作って、中途半端な状態で終わっちゃうことが多かったもんで。 >本当は自分は初心者ではないと 他のことはわかるのに、インターフェースの知識だけ欠けて、みたいな意識があって、このような不快にさせる表現を使ってしまったみたいです、すみません。 >もめる気はありません はい、その点はわかっております。 一応努力したという意思表示のつもりです。 いろいろつきあってくださってどうもありがとうございました。

関連するQ&A

  • VB2005 ツリービューに子ノードを追加

    VB2005 ExpressEditionにて開発しています。 フォームロード時にデータセットからツリービューにデータをセット しようとしています。 ルートノードには  Dim Node As TreeNode  Node = TreeView2.SelectedNode  TreeView2.Nodes.Add("追加したい名前") で追加できます。 子ノードを追加する時はどうしたらいいのでしょうか。 ご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • TreeViewの追加 C++Builder

    TreeViewが2つあるとします。 TreeView1へTreeView2のツリーを追加したい場合 どのようにすればよいでしょうか? TreeView2の複数のノードを追加したいのですが。 どなたか、お願いします。

  • 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に、子ノードの一斉展開機能が必要なので、親ノード展開時のイベントを拾って  子ノードを追加する方法は上記と同じく遅くなってしまうのではと思っていますがどうなんでしょうか?)

  • 親のIDのあるデータをツリー状に並べたい

    @data=( '1<><>あああああ', '2<><>いいいいい', '3<>1<>ううううう', '4<>3<>えええええ', '5<>2<>おおおおお', ); このような <>で区切ったデータがあるとします。 一番左の数字は、そのデータのIDで、その次の数字は、 その親データのIDです。 このデータを、 1<><>あああああ  3<>1<>ううううう   4<>3<>えええええ 2<><>いいいいい  5<>2<>おおおおお のようなツリー形式に並べたいのです。 []を1つのノードと考えた $nodes=['1<><>あああああ',['3<>1<>ううううう',['4<>3<>えええええ']],'2<><>いいいいい',['5<>2<>おおおおお']]; のような配列を作れれば、 $nodes=['1<><>あああああ',['3<>1<>ううううう',['4<>3<>えええええ']],'2<><>いいいいい',['5<>2<>おおおおお']]; sub tree{ my($i); my $depth = shift; my $ref = shift; foreach(@{$ref}) { if (ref($_) eq "ARRAY") { &tree($depth+1, $_); } else { for($i=0;$i<$depth;$i++){ print " "; } print $_."\n"; } } } &tree(0,$nodes); というコードでツリーにできるところまではできました。 ですが、 @dataから$nodesを作る方法がわからず困っています。 $nodesは多少違うものでも構いませんので、 何かいい方法があれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Oracle階層問合せよりツリーノードを作成

    Oracle階層問合せの結果よりVB.NETのTreeViewを作成する方法を教えてください。 ・階層問合せのサンプル SELECT LPAD(' ', 2*level-1)||SYS_CONNECT_BY_PATH(last_name, '/') "Path" FROM employees START WITH last_name = 'Kochhar' CONNECT BY PRIOR employee_id = manager_id; Path --------------------------------------------------------------- /Kochhar /Kochhar/Greenberg /Kochhar/Greenberg/Faviet /Kochhar/Greenberg/Chen /Kochhar/Greenberg/Sciarra /Kochhar/Greenberg/Urman /Kochhar/Greenberg/Popp /Kochhar/Whalen /Kochhar/Mavris /Kochhar/Baer /Kochhar/Higgins /Kochhar/Higgins/Gietz VB.NET作成途中 Dim LEVEL_prev As Integer = 0 Dim node_prev As New TreeNode("") Dim aryNODENO(16) As Integer While (reader.Read()) NODE_NO = reader.Item("NODE_NO") LEVEL = reader.Item("LEVEL") PATH = reader.Item("PATH") NAME = reader.Item("NAME") Dim i As Integer Dim node_cur As New TreeNode("") node_cur.Expanded = True node_cur.Text = strSITE_NAME If intNODE_NO = 1 Then ' 新規ノードを準備する TreeView2.Nodes.Add(node_cur) Else If intLEVEL_prev < intLEVEL Then ' 下位層へ移動の場合、新規ノードを準備する TreeView2.Nodes(aryNODENO(intLEVEL - 1) - 1).ChildNodes.Add(node_cur) ElseIf intLEVEL_prev = intLEVEL Then '前のノードと同一階層 ' 前のノードを上位階層へ追加 TreeView2.Nodes(aryNODENO(intLEVEL - 1) - 1).ChildNodes.Add(node_cur) ElseIf intLEVEL_prev > intLEVEL Then ' '' 上位層へ移動の場合 '' ' ノードを上位階層へ追加 TreeView2.Nodes(aryNODENO(intLEVEL - 1) - 1).ChildNodes.Add(node_cur) End If End If intLEVEL_prev = intLEVEL node_prev = node_cur End While     Me.TreeView2.Nodes(0).Expand() 以上

  • VB2005 TreeViewの任意ノード選択

    お世話になっております。 VB2005でWinアプリを開発中です。 ルートノードは1つで、 そこから子、孫、ひ孫・・・と階段状になるTreeViewを作っています。 親   L子      L孫         Lひ孫             ・・・・ このようなツリーに対し、プログラムで任意のノードを選択状態にしたいのですが、 ノードの名称などで一発で指定する方法はありますでしょうか?? 上の例で、「孫」を選択状態にしたい場合、 TreeView1.SelectedNode = TreeView1.Nodes(0).Nodes(0).Nodes(0) と書けば、できることはできるのですが。 他にもっとよい方法があるはずと思うのですが、見つけられませんでした。 VB6.0なら、下記に方法があったのですが・・・ http://oshiete1.goo.ne.jp/qa732490.html よろしくお願いします。

  • TreeViewに重複する値をセット

    VB2005Expressで開発しています。 TreeViewにデータテーブルの値をセットして表示しています。 セットする値に重複する値がある場合、ツリーの構造が崩れてしまいます。左図のようにしたいのですが、右図のようになってしまいます。 あ あ |-い |-い | | | | | -う | -う お | -え |-い お | | | -え ツリーの値に非表示のキーを持たせる等、何か対応法をご存知の方が いらっしゃいましたら教えて下さい。下記がPGMです。 '処理内容:TreeViewにデータテーブルの値をセット Private Function fncTreeViewSet() As Boolean Dim dTbl As DataTable Dim Node As TreeNode Dim intMenuNo As Integer Dim strMenuName1 As String Dim strMenuName2 As String Dim strMenuName3 As String Dim strMenuName4 As String Dim strMenuName5 As String Dim i As Integer Node = TreeView1.SelectedNode dTbl = dsDataSet.Tables("Mメニュー") For i = 0 To dTbl.Rows.Count() - 1 intMenuNo = 0 strMenuName1 = "" strMenuName2 = "" strMenuName3 = "" strMenuName4 = "" strMenuName5 = "" strMenuName1 = Trim$(dTbl.Rows(i)("階層1")) intMenuNo = dTbl.Rows(i)("工程番号") strMenuName2 = Trim$(dTbl.Rows(i)("階層2").ToString) strMenuName3 = Trim$(dTbl.Rows(i)("階層3").ToString) strMenuName4 = Trim$(dTbl.Rows(i)("階層4").ToString) strMenuName5 = Trim$(dTbl.Rows(i)("階層5").ToString) If strMenuName1 = "" Then Else If strMenuName2 = "" Then TreeView1.Nodes.Add(strMenuName1) '階層1をセット Else If strMenuName3 = "" Then fncSerchNode(strMenuName1) TreeView1.SelectedNode.Nodes.Add(strMenuName2) '階層2をセット Else If strMenuName4 = "" Then fncSerchNode(strMenuName2) TreeView1.SelectedNode.Nodes.Add(strMenuName3) '階層3をセット Else If strMenuName5 = "" Then fncSerchNode(strMenuName3) TreeView1.SelectedNode.Nodes.Add(strMenuName4) '階層4をセット Else fncSerchNode(strMenuName4) TreeView1.SelectedNode.Nodes.Add(strMenuName5) End If End If End If End If End If Next TreeView1.SelectedNode = Nothing End Function '処理内容:指定ノード選択 Private Function fncSerchNode(ByVal strMenuName As String) As Boolean Dim Node As TreeNode For Each Node In fncGetAllNodes(TreeView1.Nodes) If Node.Text = strMenuName Then TreeView1.SelectedNode = Node Exit For End If Next End Function '処理内容:子ノードも含んだすべてのノードを取得 Private Function fncGetAllNodes(ByVal Nodes As TreeNodeCollection) As ArrayList Dim Ar As New ArrayList Dim Node As TreeNode For Each Node In Nodes Ar.Add(Node) If Node.GetNodeCount(False) > 0 Then Ar.AddRange(fncGetAllNodes(Node.Nodes)) End If Next Return Ar End Function

  • TreeView と DOMツリー

    C# WPF でプログラミングをしています。 TreeView に XML の階層構造を表示させて、ある項目を選択し、ボタンをクリックするとその項目の子ノードが追加されるようにするプログラムを作っています。 選択した項目(TreeView.SelectedItem(Object型)) を、DOMツリーの要素ノード (XmlElement型) にキャストし、それに新しく作った要素ノード(XmlElement型)をつなげるといったようにしているのですが、その際「挿入するノードは、異なるドキュメント コンテキストのものです。」のエラーが発生してしまいます。 XmlElement tvi = treeView.SelectedItem as XmlElement; XmlElement item = doc.CreateElement("item"); tvi.PrependChild(item); // エラー発生箇所 ※ doc は XmlDocument のインスタンスです。 解決策を教えてください。よろしくお願いします。

    • ベストアンサー
    • XML
  • TreeViewについて

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

  • コンテキストメニュークリック時のイベントハンドラ

    C#にてフォームアプリを作成しています。 そこでツリービューに表示されたノードを右クリックしたときにコンテキストメニューが表示される ように下記のように記述しました。表示されたノードの上で右クリックすると「Export」、「Import」 というメニューが表示されます。 しかし、イベントハンドラの書き方がよくわかりません。 「Export」又は「Import」がクリックされたというイベントはどう検出すればよいでしょうか。 // ノード右クリック時の動作 private void treeView1_MouseDown(object sender, MouseEventArgs e) { // 右クリックでもノードを選択させる if (e.Button == MouseButtons.Right) { // ノードの選択 treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y); // コンテクストメニューの作成 ContextMenuStrip contextMenu = new ContextMenuStrip(); ToolStripMenuItem openLabel = new ToolStripMenuItem(); openLabel.Text = "Export"; ToolStripMenuItem deleteLabel = new ToolStripMenuItem(); deleteLabel.Text = "Import"; contextMenu.Items.Add(openLabel); contextMenu.Items.Add(deleteLabel); // ツリービューにコンテキストメニューを追加 treeView1.ContextMenuStrip = contextMenu; } }