- 題名: ツリービューコントロール コンテキストメニュー
- 日時: 2004/10/18 2:17:05
- ID: 6779
- この記事の返信元:
- (なし)
- この記事への返信:
- [6784] Re[1]: ツリービューコントロール コンテキストメニュー2004/10/18 2:50:34
- ツリーを表示
■No6870に返信(kiyoさんの記事) > 今度はどうしてもツリービューへのノードの追加ロジックが思いつかないため、できたらお助けいただきたいと想い投稿させてもらいました。 > > [ツリーの元となるテーブル(DataSetのDataTable)] > CD 親CD > 1 * > 2 1 > 3 1 > 4 2 > 5 * > 6 5 > DataSetを親CD⇒CDの優先順位で昇順ソートして、 親CD CD * 1 * 5 1 2 1 3 2 4 5 6 として、上から順に作っていくか、 親CD CD * 1 * 5 だけ調べておいて、 親CD CD * 1 を作った直後に、それに続くのを検索してあれば作成・・・ と続けるとか。 大まかにいえば、 一つのルートノードを作ったら、その子ノードをすべて作成してから 次のルートノードを作るか、 データをソートして、一つずつ位置を指定して作っていくか、になるかと。 簡単なのは前者でしょうか。 そのためにはまず、DataSetを親CD⇒CDの順で昇順ソートして、 そこからは順次必要なデータを再度DataSetから検索、という流れになるかと思います。
> 両方の案を検討していたのですが、 > TreeViewのTreeNodeコレクションの森に > はまってしまいました(涙) 階層構造は見た目と同じ形になりますので、 難しくはありませんよ。 TreeView 狼reeNode(ルートノード) 狼reeNode(子ノード) 狼reeNode(子ノード) 狼reeNode(ルートノード) のような感じになります。 ルートノード・子ノードというのは Parentプロパティに親TreeNodeがあるかないか(TreeViewが親か)の違いだけで、 別物というわけではありません。どちらも同じTreeNodeです。 > TreeNodeの位置を指定して追加するのはどのようにしたら良いのか ルートノードからファイル検索のように該当ノードを検索していくしかないです。 それか、CD、親CD、該当TreeNodeの情報を持つ一次元配列などを作っていき、 そちらから検索するとか。 サンプルを載せておきます。 CD 親CD 1 * 2 1 3 1 4 2 5 * 6 5 と格納されている二次元配列 Dim CDData(6, 2) As String があるという前提で。 Private Sub Form1_Load( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load For i As Integer = 0 To UBound(CDData) - 1 If CDData(i, 1) = "*" Then Dim node As TreeNode node = TreeView1.Nodes.Add(CDData(i, 0)) Call AddChildNode(node) End If Next End Sub Private Sub AddChildNode(ByRef node As TreeNode) For i As Integer = 0 To UBound(CDData) - 1 If CDData(i, 1) = node.Text Then Dim childNode As TreeNode childNode = node.Nodes.Add(CDData(i, 0)) AddChildNode(childNode) End If Next End Sub これは、先のレスの前者の方法になります。 サンプルということで、特にデータ操作も行っていませんが、 データ件数が多くなった場合は、処理速度を上げるため、 先のレスのように、DataSetの中から必要な形で必要な分だけの DataSetを取得し、それを使ってループ処理をするといった、 テクニックが必要になると思います。
分類:[.NET]
こんにちわ。ML、.NET Tipsでいつもお世話になっております。
質問なんですが、
ツリービューコントロール(Windowsフォーム)のノードにコンテキストメニューを設定することはできないのでしょうか?
ノードを選択し、選択しているノード上で右クリックしたときにコンテキストメニューを表示したいと考えております。
ツリービューコントロール自体のコンテキストメニューを設定してしまうと、
ツリービューコントロールのあらゆる場所で、右クリックすると出てきてしまって
困っています。
開発環境は
.NET Framework 1.1 SP1
Visual Studio 2003
VB.NET
です。よろしくお願いします。