- 題名: ツリービューコントロール コンテキストメニュー
- 日時: 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
です。よろしくお願いします。