• 締切済み

.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) よろしくお願いいたします。

みんなの回答

  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

>TreeViewやNodeのプロパティ、メソッドも調べてみましたが、それらしいものがありません。 TreeView.DrawModeプロパティがあると思うのですが、確認されてみてください。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.treeview.drawmode(v=vs.110).aspx

icc02739
質問者

お礼

さっそくのご回答ありがとうございます。 サイトの情報を参考にいろいろ試してみましたが、まだ成功していません。 DrawModeのイベントを処理することで、いろいろ工夫ができることはわかりました。もう少し試してみます。

関連するQ&A

  • C#でtreeviewの指定ノードを選択する

    C#にて、 treeviewでの選択ノードを記憶しておき、 treeviewを一度更新(削除し作成)し、 記憶してあるノードを再び選択する。という動きをしたいです。 TreeNode tn = new TreeNode(); tn = treeView1.SelectedNode; //ここでDB再読み込み→treeView再作成 treeView1.Focus(); treeView1.SelectedNode = tn; としているのですが、TopNode選択状態になってしまい、 最初に選択していたNodeを選択してくれません。 どなたかご教授願います。 よろしくお願いいたします。

  • C# TreeViewのノードの判定

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

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

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

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

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

  • 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

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

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

  • TreeViewのCheckBoxについて

    はじめまして。 以下の環境で開発しています。 Visual studio 2005 Version 8.0.50727.867 (vsvista.050727-8600) .NET Framework Version 2.0.50727 SP2 Visual Basic 2005 TreeView(二階層限定)にCheckBoxを表示させて親ノードのCheckBoxをTrue/Falseすると その子ノードのCheckBoxも全部合わせてTrue/Falseするものを作ろうとしていますが、 CheckBoxクリック時のイベントが拾えません。 どなたかご存知の方がおられましたらご教授ください。 通常のCheckBoxであればPostBackが発生するのですが、TreeViewのCheckBoxにはそのような イベントがありません。 TreeNodeCheckChangedイベントはあるのですが、True/Falseが切り替わったあとにTreeView のラベル選択したときに発生する中途半端なイベントなので使えません。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.treeview.aftercheck(VS.80).aspx のヘルプからAfterCheckイベントを調べて試したのですが、 Imports System.Windows.Forms Public Event AfterCheck As TreeViewEventHandler を定義して、以下の関数を書いてみたのですが、 Private Sub node_AfterCheck(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles TreeView1.AfterCheck ~中身~ End Sub 「イベントAfterCheckが見つかりません。」とコンパイルエラーとなります。 客先の開発環境なのでバージョンアップ等はできません。 どなたかCheckBoxクリック時のイベントの拾い方をご存知の方がおられましたらご教授お願いします。

  • 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
  • DelphiのTreeViewでの+ボタンの出し方

    WindowsXP、Delphi2009で開発しています。 TTreeViewのAdvancedCustomDrawItemで下記の様に動的にノードの描画を行っていますが、ノードを展開・折りたたみする際に使う+ボタンが表示できなくて困っています。 +ボタンを表示させる方法が分かる方、ご教示願います。 ------------------------------------------------------------ procedure TForm3.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); var Rect :TRect; begin defaultdraw := false; Rect := Node.DisplayRect(True); if Node.Selected = true then begin Sender.Canvas.Font.Color := clWhite; end else begin if Copy(Node.Text,pos('\',Node.Text) + 1, length(Node.Text)) = 'False' then begin Sender.Canvas.Font.Color := clWindowText; end else begin Sender.Canvas.Font.Color := clRed; end; end; Sender.Canvas.TextOut(Rect.Left,Rect.Top,Copy(Node.Text,1,pos(',',Node.Text) - 1)); end; ------------------------------------------------------------

  • C# ツリービューの使い方

    現在、Microsoft Visual C# 2008 Express Editionでプログラムを作成しているのですが、ツリービューの使い方がよくわかりません。 具体的には、ツリービューとリストビューを左右に並べて、ツリービューのノードをクリックしたときに、その子ノードをリストビューに表示したいと考えています。 そこで、 ツリービューのNodeMouseClickイベントで foreach ( TreeNode child in this.treeView1.SelectedNode.ChildNodes ) { //リストにノードを表示する } と記述したのですが、 「'System.Windows.Forms.TreeNode' に 'ChildNodes' の定義が含まれておらず、型 'System.Windows.Forms.TreeNode' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」 というエラーが発生しました。 これを解決するにはどうすればいいのでしょうか?また、私が実装しようと考えている機能を、ツリービューとリストビューを併用した方法以外でより効率的にかけたりしますか? C#に詳しい人、回答よろしくお願いします。

専門家に質問してみよう