作成日: 2023/03/06 最終更新日: 2023/03/06
文書種別
使用方法
詳細
ツリー表示で、各ノード行の展開/縮小アイコン以外の部分をクリックした時に子ノードを追加するには、MouseDownイベントにてHitTestメソッドを利用する方法が考えられます。
最初にIsNodeプロパティを用いてノード行がクリックされたことを検知し、次いでHitTest.Typeにより「展開/縮小アイコン」以外がクリックされたと判断された場合に、AddNodeメソッドで子ノードを追加します。

以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
最初にIsNodeプロパティを用いてノード行がクリックされたことを検知し、次いでHitTest.Typeにより「展開/縮小アイコン」以外がクリックされたと判断された場合に、AddNodeメソッドで子ノードを追加します。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
C1FlexGrid1.Rows.Count = 4
C1FlexGrid1.Cols.Fixed = 0
C1FlexGrid1.Tree.Column = 0
C1FlexGrid1.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
C1FlexGrid1.Rows(1).IsNode = True
C1FlexGrid1.Rows(1).Node.Level = 0
C1FlexGrid1.Rows(2).IsNode = True
C1FlexGrid1.Rows(2).Node.Level = 1
C1FlexGrid1.Rows(3).IsNode = True
C1FlexGrid1.Rows(3).Node.Level = 2
C1FlexGrid1(1, 0) = "階層レベル0"
C1FlexGrid1(2, 0) = "階層レベル1"
C1FlexGrid1(3, 0) = "階層レベル2"
C1FlexGrid1.AutoSizeCol(0)
End Sub
Private Sub C1FlexGrid1_MouseDown(sender As Object, e As MouseEventArgs) Handles C1FlexGrid1.MouseDown
' ツリーノードの行がクリックされた場合
If C1FlexGrid1.Rows(C1FlexGrid1.MouseRow).IsNode Then
' ツリーのボタン以外がクリックされた場合
If C1FlexGrid1.HitTest(e.Location).Type <> HitTestTypeEnum.OutlineTree Then
' ノードの追加
Dim nd As Node = C1FlexGrid1.Rows(C1FlexGrid1.Row).Node
nd.AddNode(NodeTypeEnum.FirstChild, "追加ノード")
End If
End If
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
c1FlexGrid1.Rows.Count = 4;
// アウトラインツリーの設定
c1FlexGrid1.Cols.Fixed = 0;
c1FlexGrid1.Tree.Column = 0;
c1FlexGrid1.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
c1FlexGrid1.Rows[1].IsNode = true;
c1FlexGrid1.Rows[1].Node.Level = 0;
c1FlexGrid1.Rows[2].IsNode = true;
c1FlexGrid1.Rows[2].Node.Level = 1;
c1FlexGrid1.Rows[3].IsNode = true;
c1FlexGrid1.Rows[3].Node.Level = 2;
c1FlexGrid1[1, 0] = "階層レベル0";
c1FlexGrid1[2, 0] = "階層レベル1";
c1FlexGrid1[3, 0] = "階層レベル2";
c1FlexGrid1.AutoSizeCol(0);
}
private void c1FlexGrid1_MouseDown(object sender, MouseEventArgs e)
{
// ツリーノードの行がクリックされた場合
if (c1FlexGrid1.Rows[c1FlexGrid1.MouseRow].IsNode)
{
// ツリーのボタン以外がクリックされた場合
if (c1FlexGrid1.HitTest(e.Location).Type != HitTestTypeEnum.OutlineTree)
{
// ノードの追加
Node nd = c1FlexGrid1.Rows[c1FlexGrid1.Row].Node; // 現在の行ノード
nd.AddNode(NodeTypeEnum.FirstChild, "追加ノード");
}
}
}
}
}