作成日: 2020/07/09 最終更新日: 2020/07/09
文書種別
使用方法
詳細
C1GanttViewには、以下の2種類のコンテキストメニューが用意されています。
・GridContextMenu:グリッドビューに表示されるコンテキストメニュー
・ChartContextMenu:グラフビューに表示されるコンテキストメニュー
これらはSystem.Windows.Forms.ContextMenuStripクラスを継承しており、Items.Addメソッド用いてコンテキストメニューの項目を追加できます。
このとき、グリッドヘッダーとグリッド部、またはグラフヘッダーとグラフ部で、異なるメニューを追加するには、グリッドやグラフで内部的に用いられているC1FlexGridのMouseDownイベントを使用します。このイベント内で、C1FlexGridのHitTestInfoメソッドによりクリックされたセルを検出し、ヘッダーであるかどうかによって追加するコンテキストメニューを変更します。
◎サンプルコード(VB)
・GridContextMenu:グリッドビューに表示されるコンテキストメニュー
・ChartContextMenu:グラフビューに表示されるコンテキストメニュー
これらはSystem.Windows.Forms.ContextMenuStripクラスを継承しており、Items.Addメソッド用いてコンテキストメニューの項目を追加できます。
このとき、グリッドヘッダーとグリッド部、またはグラフヘッダーとグラフ部で、異なるメニューを追加するには、グリッドやグラフで内部的に用いられているC1FlexGridのMouseDownイベントを使用します。このイベント内で、C1FlexGridのHitTestInfoメソッドによりクリックされたセルを検出し、ヘッダーであるかどうかによって追加するコンテキストメニューを変更します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim grid As C1FlexGrid = CType(C1GanttView1.Controls(2), C1FlexGrid)
AddHandler grid.MouseDown, AddressOf Grid_MouseDown
Dim chart As C1FlexGrid = CType(C1GanttView1.Controls(0), C1FlexGrid)
AddHandler chart.MouseDown, AddressOf Chart_MouseDown
End Sub
Private Sub Grid_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
Dim grid As C1FlexGrid = CType(sender, C1FlexGrid)
Dim ht As HitTestInfo = grid.HitTest(e.X, e.Y)
If (ht.Type = HitTestTypeEnum.ColumnHeader) Then
If (C1GanttView1.GridContextMenu.Items.Count = 13) Then
C1GanttView1.GridContextMenu.Items.RemoveAt(12)
End If
C1GanttView1.GridContextMenu.Items.Add("Gridメニュー1", Nothing, AddressOf Me.GridMenuItem1_click)
Else
If (C1GanttView1.GridContextMenu.Items.Count = 13) Then
C1GanttView1.GridContextMenu.Items.RemoveAt(12)
End If
C1GanttView1.GridContextMenu.Items.Add("Gridメニュー2", Nothing, AddressOf Me.GridMenuItem2_click)
End If
End Sub
Private Sub GridMenuItem1_click(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Gridメニュー1がクリックされました")
End Sub
Private Sub GridMenuItem2_click(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Gridメニュー2がクリックされました")
End Sub
Private Sub Chart_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
Dim chart As C1FlexGrid = CType(sender, C1FlexGrid)
Dim ht As HitTestInfo = chart.HitTest(e.X, e.Y)
If (ht.Type = HitTestTypeEnum.ColumnHeader) Then
If (C1GanttView1.ChartContextMenu.Items.Count = 11) Then
C1GanttView1.ChartContextMenu.Items.RemoveAt(10)
End If
C1GanttView1.ChartContextMenu.Items.Add("Chartメニュー1", Nothing, AddressOf Me.ChartMenuItem1_click)
Else
If (C1GanttView1.ChartContextMenu.Items.Count = 11) Then
C1GanttView1.ChartContextMenu.Items.RemoveAt(10)
End If
C1GanttView1.ChartContextMenu.Items.Add("Chartメニュー2", Nothing, AddressOf Me.ChartMenuItem2_click)
End If
End Sub
Private Sub ChartMenuItem1_click(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Chartメニュー1Lがクリックされました")
End Sub
Private Sub ChartMenuItem2_click(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Chartメニュー2Lがクリックされました")
End Sub
End Class
◎サンプルコード(C#)using C1.Win.C1FlexGrid;
namespace GanttViewContextMenuDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
C1FlexGrid grid = c1GanttView1.Controls[2] as C1FlexGrid;
grid.MouseDown += Grid_MouseDown;
C1FlexGrid chart = c1GanttView1.Controls[0] as C1FlexGrid;
chart.MouseDown += Chart_MouseDown;
}
private void Grid_MouseDown(object sender, MouseEventArgs e)
{
C1FlexGrid grid = sender as C1FlexGrid;
HitTestInfo ht = grid.HitTest(e.X, e.Y);
if(ht.Type == HitTestTypeEnum.ColumnHeader)
{
if (c1GanttView1.GridContextMenu.Items.Count == 13)
{
c1GanttView1.GridContextMenu.Items.RemoveAt(12);
}
c1GanttView1.GridContextMenu.Items.Add("Gridメニュー1", null, new System.EventHandler(GridMenuItem1_click));
}
else
{
if (c1GanttView1.GridContextMenu.Items.Count == 13)
{
c1GanttView1.GridContextMenu.Items.RemoveAt(12);
}
c1GanttView1.GridContextMenu.Items.Add("Gridメニュー2", null, new System.EventHandler(GridMenuItem2_click));
}
}
void GridMenuItem1_click(object sender, EventArgs e)
{
MessageBox.Show("Gridメニュー1がクリックされました");
}
void GridMenuItem2_click(object sender, EventArgs e)
{
MessageBox.Show("Gridメニュー2がクリックされました");
}
private void Chart_MouseDown(object sender, MouseEventArgs e)
{
C1FlexGrid chart = sender as C1FlexGrid;
HitTestInfo ht = chart.HitTest(e.X, e.Y);
if (ht.Type == HitTestTypeEnum.ColumnHeader)
{
if (c1GanttView1.ChartContextMenu.Items.Count == 11)
{
c1GanttView1.ChartContextMenu.Items.RemoveAt(10);
}
c1GanttView1.ChartContextMenu.Items.Add("Chartメニュー1", null, new System.EventHandler(ChartMenuItem1_click));
}
else
{
if (c1GanttView1.ChartContextMenu.Items.Count == 11)
{
c1GanttView1.ChartContextMenu.Items.RemoveAt(10);
}
c1GanttView1.ChartContextMenu.Items.Add("Chartメニュー2", null, new System.EventHandler(ChartMenuItem2_click));
}
}
void ChartMenuItem1_click(object sender, EventArgs e)
{
MessageBox.Show("Chartメニュー1がクリックされました");
}
void ChartMenuItem2_click(object sender, EventArgs e)
{
MessageBox.Show("Chartメニュー2がクリックされました");
}
}
}
関連情報
旧文書番号
85792