TreeView for WinFormsの特徴[3]
列を持ったツリービュー表示
C1TreeViewでは、項目ごとに複数の列を持つことができます。
2列目に各クラスの生徒数を表示する列を追加します。
以下のように総生徒数を返すcountプロパティを追加します。
public class Class
{
// クラス名
private string _name;
public string name
{
get { return _name; }
set { _name = value; }
}
private BindingList<Student> _studentList = new BindingList<Student>();
public BindingList<Student> studentList
{
get { return _studentList; }
set { _studentList = value; }
}
// 総生徒数を返す
public int count
{
get{ return studentList.Count; }
}
}
列(column)を追加し、追加した列に総生徒数を表示するように指定します。
// 列の指定を一旦クリアクリア c1TreeView1.Columns.Clear(); C1TreeColumn clumn1 = new C1TreeColumn(); clumn1.HeaderText = "クラス"; c1TreeView1.Columns.Add(clumn1); C1TreeColumn clumn2 = new C1TreeColumn(); clumn2.HeaderText = "総生徒数"; clumn2.DisplayFieldName = "count\\count"; c1TreeView1.Columns.Add(clumn2);
カスタムノード
カスタムノードの機能を利用すると、ノードの表示をカスタマイズすることができます。
カスタムノードの設定は、CustomContentPresenterを継承したクラスで表示内容を定義します。
CustomContentPresenterを継承したクラスは、以下のメソッドをオーバーライドすることで固有の表示を定義します。
| ToolTipText | ツールチップの表示を指定します |
|---|---|
| SetStyle | スタイルを定義します |
| SetValue | 各ノード毎のデータを指定します |
| SetFormat | フォーマットを指定します |
CustomContentPresenterを継承した、以下のようなクラスを用意します。
public class SampleCustomNode : CustomContentPresenter
{
// 階層1
private TextElement _text1;
private ImageElement _img1;
private RowPanel _rowPanel;
// 階層2
private TextBoxElement _text2;
public SampleCustomNode()
{
// 階層1の初期化
_text1 = new TextElement();
_text1.Style = new Style();
_img1 = new ImageElement();
_img1.Style = new Style();
_img1.Size = new Size(45, 45);
_rowPanel = new RowPanel();
_rowPanel.Children.Add(_text1);
_rowPanel.Children.Add(_img1);
_rowPanel.Style = new Style();
_rowPanel.Style.VerticalAlignment = Alignment.Center;
// 階層2の初期化初期化
_text2 = new TextBoxElement();
_text2.Style = new Style();
}
public override string ToolTipText
{
get
{
return this.ToString();
}
}
public override void SetStyle(TreeNodeCellStyles styles)
{
// 階層1
_text1.Style.Margins = new Thickness(1);
_text1.Style.Font = new Font("Calibri", 10, FontStyle.Bold);
_img1.Style.ImageScaling = ImageScaling.Scale;
_img1.Style.ImageAlignment = ImageAlignment.CenterCenter;
// 階層2
_text2.Style.Font = new Font("Calibri", 10, FontStyle.Bold);
_text2.Style.HorizontalAlignment = Alignment.Center;
_text2.Style.VerticalAlignment = Alignment.Center;
}
// 各ノードに利用するデータを設定する
// 引数のobjectは表示に利用するデータが渡される。
public override void SetValue(object value)
{
// 階層1なら
if (Node.Level == 0)
{
_text1.Text = (string)value;
_img1.Image = Image.FromFile("logo.png");
Child = _rowPanel;
}
// 階層2なら
else
{
_text2.Text = (string)value;
Child = _text2;
}
}
public override void SetFormat(string str)
{
}
}
上記のSampleCustomNodeクラスを1列目の見た目に設定します。
c1TreeView1.Columns[0].CustomContentPresenter = new SampleCustomNode();
まとめ
TreeView for WinFormsはツリービューに必要な基本的な機能に加えて、ツリービューの表示に複数列を用いることができ、それぞれの列の表示を柔軟にカスタマイズできます。
高機能なツリービューを自社で開発するのは大変です。本記事で紹介したTreeView for WinFormsを利用し、開発コスト・開発期間の短縮に活かしてみてください。

