ツリービューの構成要素を変更する

ツリービューにノードを追加したり削除したり、子ノードを追加したり削除したりするサンプルを検討する。
参考にするのは、IronPythonのサンプルの中の、FMsynthというプログラムになる。基になるツリービューは、SharpDevelopのデザイン画面で作成した。

ボタンを3種類設置する。親ノードを作成するボタン、子ノードを作成するボタン、ノードを削除するボタンの3つ。サンプルコードは以下の通り。

import System.Drawing
import System.Windows.Forms

from System.Drawing import *
from System.Windows.Forms import *

class MainForm(Form):
 def __init__(self):
  self.InitializeComponent()
  
  self.numList = 2   #初期のノード数
  self.numChild = 3  #初期の子ノード数
 
 def InitializeComponent(self):
  treeNode11 = System.Windows.Forms.TreeNode("Child-1-1")
  treeNode12 = System.Windows.Forms.TreeNode("Child-1-2")
  treeNode13 = System.Windows.Forms.TreeNode("List-1", System.Array[System.Windows.Forms.TreeNode](
   [treeNode11,
   treeNode12]))
  treeNode14 = System.Windows.Forms.TreeNode("Child-2-2")
  treeNode15 = System.Windows.Forms.TreeNode("List-2", System.Array[System.Windows.Forms.TreeNode](
   [treeNode14]))
  self._treeView1 = System.Windows.Forms.TreeView()
  self._button1 = System.Windows.Forms.Button()
  self._button2 = System.Windows.Forms.Button()
  self._button3 = System.Windows.Forms.Button()
  self.SuspendLayout()
  #
  # treeView1
  #
  self._treeView1.Dock = System.Windows.Forms.DockStyle.Fill
  self._treeView1.Location = System.Drawing.Point(0, 0)
  self._treeView1.Name = "treeView1"
  treeNode11.Name = "Child-1-1"
  treeNode11.Text = "Child-1-1"
  treeNode12.Name = "Child-1-2"
  treeNode12.Text = "Child-1-2"
  treeNode13.Name = "List-1"
  treeNode13.Text = "List-1"
  treeNode14.Name = "Child-2-1"
  treeNode14.Text = "Child-2-2"
  treeNode15.Name = "List-2"
  treeNode15.Text = "List-2"
  self._treeView1.Nodes.AddRange(System.Array[System.Windows.Forms.TreeNode](
   [treeNode13,
   treeNode15]))
  self._treeView1.Size = System.Drawing.Size(284, 262)
  self._treeView1.TabIndex = 0
  #
  # button1
  #
  self._button1.Location = System.Drawing.Point(136, 148)
  self._button1.Name = "button1"
  self._button1.Size = System.Drawing.Size(124, 23)
  self._button1.TabIndex = 1
  self._button1.Text = "Add List"
  self._button1.UseVisualStyleBackColor = True
  self._button1.Click += self.Button1Click
  #
  # button2
  #
  self._button2.Location = System.Drawing.Point(136, 177)
  self._button2.Name = "button2"
  self._button2.Size = System.Drawing.Size(124, 23)
  self._button2.TabIndex = 2
  self._button2.Text = "Add Child"
  self._button2.UseVisualStyleBackColor = True
  self._button2.Click += self.Button2Click
  #
  # button3
  #
  self._button3.Location = System.Drawing.Point(136, 206)
  self._button3.Name = "button3"
  self._button3.Size = System.Drawing.Size(124, 23)
  self._button3.TabIndex = 3
  self._button3.Text = "Remove Source"
  self._button3.UseVisualStyleBackColor = True
  self._button3.Click += self.Button3Click
  #
  # MainForm
  #
  self.ClientSize = System.Drawing.Size(284, 262)
  self.Controls.Add(self._button3)
  self.Controls.Add(self._button2)
  self.Controls.Add(self._button1)
  self.Controls.Add(self._treeView1)
  self.Name = "MainForm"
  self.Text = "test"
  self.ResumeLayout(False)

 def Button1Click(self, sender, e):
  # 親ノードを追加する
  self.numList += 1
  n = self._treeView1.Nodes.Add("New List")
  self._treeView1.SelectedNode = n
  n.Text = "List-" + str(self.numList)

 def Button2Click(self, sender, e):
  # 子ノードを追加する
  self.numChild += 1
  if self._treeView1.SelectedNode == None:
   return
  n = self._treeView1.SelectedNode.Nodes.Add("New Child")
  self._treeView1.SelectedNode.Expand()
  n.Text = "Child-" + str(self.numChild)

 def Button3Click(self, sender, e):
  # ノードを削除する
  if self._treeView1.SelectedNode == None:
   return
  self._treeView1.Nodes.Remove(self._treeView1.SelectedNode)

実行結果は以下のようになる。

▲起動画面

▲ボタンを押してList-3を加えた

▲Child-1-2の下に子ノードを加えたい

▲子ノードのChild-4が加えられた

▲ノードを消していく。ほとんど消えた