- PR -

TreeViewについて質問

1
投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2006-01-03 22:15
現在、VS2002、C#でTreeViewのサンプルプログラムを
作成しています。

TreeViewの扱いについて分からないことがあるので、
勉強不足ではありますが、教えていただきたいことがあります。

Tree1
+Tree2
Tree1
+Tree2  ←ここの下に子ツリーを追加したい
Tree1
+Tree2
Tree1
+Tree2
Tree1
+Tree2

上記のようなTreeViewを作成したとします。
このとき、何かのイベント(ボタンを押下などのタイミング)で
子ツリーを追加したい場合にはどのようにすれば良いのでしょうか?
ViewTree1.SelectedNode.FullPathを使って、
名前から取得しようとしていたのですが、これでは同じ名前の子ツリーが存在した場合などに
期待通りの動作を致しません。

どうにかして、上から2個目のTree2をデフォルトにしたいのですが、
何か良い方法はないのでしょうか?

ヨロシクお願いします。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-01-04 00:19
お世話になります。

VS2002 の環境でない & C# はあまり慣れてません...ので
見当違いでしたらごめんなさい。

こんな感じで、TreeNode を継承したクラスに
独自メンバを持って管理するのはいかがでしょうか。

コード:
public class Form1 : System.Windows.Forms.Form
{
  // 略
  #region Windows フォーム デザイナで生成されたコード 
  // 略
  #endregion

  /// <summary>
  /// アプリケーションのメイン エントリ ポイントです。
  /// </summary>
  [STAThread]
  static void Main() 
  {
    Application.Run(new Form1());
  }
  private int m_id;
  private Hashtable m_ht;

  private void Form1_Load(object sender, System.EventArgs e)
  {
    this.m_id = 0;
    this.m_ht = new Hashtable();
    MyTreeNode nodeA = this.makeTreeNode("Tree1");
    nodeA.Nodes.Add(this.makeTreeNode("Tree2"));
    MyTreeNode nodeB = this.makeTreeNode("Tree1");
    nodeB.Nodes.Add(this.makeTreeNode("Tree2"));
    MyTreeNode nodeC = this.makeTreeNode("Tree1");
    nodeC.Nodes.Add(this.makeTreeNode("Tree2"));
    MyTreeNode nodeD = this.makeTreeNode("Tree1");
    nodeD.Nodes.Add(this.makeTreeNode("Tree2"));

    this.treeView1.Nodes.Add(nodeA);
    this.treeView1.Nodes.Add(nodeB);
    this.treeView1.Nodes.Add(nodeC);
    this.treeView1.Nodes.Add(nodeD);
  }

  private void button2_Click(object sender, System.EventArgs e)
  {
    MyTreeNode node = (MyTreeNode)this.m_ht[3];
    if (node != null)
    {
      this.treeView1.SelectedNode = node;
      // 子ノードの追加
      this.treeView1.SelectedNode.Nodes.Add(this.makeTreeNode("child"));
      this.treeView1.SelectedNode.ExpandAll();
    }
  }

  private MyTreeNode makeTreeNode(string name)
  {
    MyTreeNode node = new MyTreeNode(name, this.m_id);
    this.m_ht.Add(this.m_id, node);
    this.m_id++;
    return node;
  }
}

public class MyTreeNode : System.Windows.Forms.TreeNode
{
private int m_id;

public int id
{
  get
  {
    return this.m_id;
  }
}
public MyTreeNode(string text, int id): base (text)
{
  this.m_id = id;
}

}

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-04 00:32
たとえば、Click イベントなどであれば、
面倒なことせずに Node 自体を取得できますよね。

TreeView のイベントって Node に特化したものばかりですし、困った験しがありません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)