セル/列ヘッダ/行ヘッダで異なるコンテキストメニューを表示したい
対象製品
SPREAD for Windows Forms 8.0J
詳細
シート上でコンテキストメニューを表示する場合には、標準のContextMenuStripクラスを使用します。セル/列ヘッダ/行ヘッダで異なるメニューを表示するには、セルがクリックされたときに発生するCellClickイベント内でメニューに表示する項目を切り替えることで実現できます。
◎サンプルコード(VB)
◎サンプルコード(C#)
◎サンプルコード(VB)
Private cMenu As ContextMenuStrip
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' コンテキストメニューの作成
cMenu = New ContextMenuStrip()
cMenu.Items.Add("行の削除", Nothing, New System.EventHandler(AddressOf DeleteRow))
cMenu.Items.Add("列の削除", Nothing, New System.EventHandler(AddressOf DeleteColumn))
cMenu.Items.Add("値の削除", Nothing, New System.EventHandler(AddressOf DeleteValue))
For i As Integer = 0 To cMenu.Items.Count - 1
cMenu.Items(i).Name = cMenu.Items(i).Text
Next
' テストデータの設定
For i As Integer = 0 To 10 - 1
For j As Integer = 0 To 10 - 1
FpSpread1.ActiveSheet.SetValue(i, j, String.Format("R{0}C{1}", i, j))
Next
Next
End Sub
Private Sub FpSpread1_CellClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellClick
' マウスの右ボタンでクリックされた場合
If e.Button = Windows.Forms.MouseButtons.Right Then
' アクティブセルの設定
FpSpread1.ActiveSheet.SetActiveCell(e.Row, e.Column)
' コンテキストメニューの項目を設定
If e.RowHeader = True And e.ColumnHeader = True Then
' シートコーナーの場合
cMenu.Items("行の削除").Visible = False
cMenu.Items("列の削除").Visible = False
cMenu.Items("値の削除").Visible = False
ElseIf e.RowHeader Then
' 行ヘッダの場合
cMenu.Items("行の削除").Visible = True
cMenu.Items("列の削除").Visible = False
cMenu.Items("値の削除").Visible = False
ElseIf e.ColumnHeader Then
' 列ヘッダの場合
cMenu.Items("行の削除").Visible = False
cMenu.Items("列の削除").Visible = True
cMenu.Items("値の削除").Visible = False
ElseIf Not e.ColumnFooter Then
' 通常セルの場合
cMenu.Items("行の削除").Visible = False
cMenu.Items("列の削除").Visible = False
cMenu.Items("値の削除").Visible = True
End If
' コンテキストメニューの表示
cMenu.Show(FpSpread1, e.X, e.Y)
End If
End Sub
Private Sub DeleteRow(ByVal sender As Object, ByVal e As System.EventArgs)
' RemoveRowsメソッドの呼び出し
FpSpread1.ActiveSheet.RemoveRows(FpSpread1.ActiveSheet.ActiveRowIndex, 1)
End Sub
Private Sub DeleteColumn(ByVal sender As Object, ByVal e As System.EventArgs)
' RemoveColumnsメソッドの呼び出し FpSpread1.ActiveSheet.RemoveColumns(FpSpread1.ActiveSheet.ActiveColumnIndex, 1)
End Sub
Private Sub DeleteValue(ByVal sender As Object, ByVal e As System.EventArgs)
' ClearRangeメソッドの呼び出し
FpSpread1.ActiveSheet.ClearRange(FpSpread1.ActiveSheet.ActiveRowIndex, FpSpread1.ActiveSheet.ActiveColumnIndex, 1, 1, True)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' コンテキストメニューの作成
cMenu = New ContextMenuStrip()
cMenu.Items.Add("行の削除", Nothing, New System.EventHandler(AddressOf DeleteRow))
cMenu.Items.Add("列の削除", Nothing, New System.EventHandler(AddressOf DeleteColumn))
cMenu.Items.Add("値の削除", Nothing, New System.EventHandler(AddressOf DeleteValue))
For i As Integer = 0 To cMenu.Items.Count - 1
cMenu.Items(i).Name = cMenu.Items(i).Text
Next
' テストデータの設定
For i As Integer = 0 To 10 - 1
For j As Integer = 0 To 10 - 1
FpSpread1.ActiveSheet.SetValue(i, j, String.Format("R{0}C{1}", i, j))
Next
Next
End Sub
Private Sub FpSpread1_CellClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellClick
' マウスの右ボタンでクリックされた場合
If e.Button = Windows.Forms.MouseButtons.Right Then
' アクティブセルの設定
FpSpread1.ActiveSheet.SetActiveCell(e.Row, e.Column)
' コンテキストメニューの項目を設定
If e.RowHeader = True And e.ColumnHeader = True Then
' シートコーナーの場合
cMenu.Items("行の削除").Visible = False
cMenu.Items("列の削除").Visible = False
cMenu.Items("値の削除").Visible = False
ElseIf e.RowHeader Then
' 行ヘッダの場合
cMenu.Items("行の削除").Visible = True
cMenu.Items("列の削除").Visible = False
cMenu.Items("値の削除").Visible = False
ElseIf e.ColumnHeader Then
' 列ヘッダの場合
cMenu.Items("行の削除").Visible = False
cMenu.Items("列の削除").Visible = True
cMenu.Items("値の削除").Visible = False
ElseIf Not e.ColumnFooter Then
' 通常セルの場合
cMenu.Items("行の削除").Visible = False
cMenu.Items("列の削除").Visible = False
cMenu.Items("値の削除").Visible = True
End If
' コンテキストメニューの表示
cMenu.Show(FpSpread1, e.X, e.Y)
End If
End Sub
Private Sub DeleteRow(ByVal sender As Object, ByVal e As System.EventArgs)
' RemoveRowsメソッドの呼び出し
FpSpread1.ActiveSheet.RemoveRows(FpSpread1.ActiveSheet.ActiveRowIndex, 1)
End Sub
Private Sub DeleteColumn(ByVal sender As Object, ByVal e As System.EventArgs)
' RemoveColumnsメソッドの呼び出し FpSpread1.ActiveSheet.RemoveColumns(FpSpread1.ActiveSheet.ActiveColumnIndex, 1)
End Sub
Private Sub DeleteValue(ByVal sender As Object, ByVal e As System.EventArgs)
' ClearRangeメソッドの呼び出し
FpSpread1.ActiveSheet.ClearRange(FpSpread1.ActiveSheet.ActiveRowIndex, FpSpread1.ActiveSheet.ActiveColumnIndex, 1, 1, True)
End Sub
◎サンプルコード(C#)
private ContextMenuStrip cMenu;
private void Form1_Load(object sender, EventArgs e)
{
// コンテキストメニューの作成
cMenu = new ContextMenuStrip();
cMenu.Items.Add("行の削除", null, new System.EventHandler(DeleteRow));
cMenu.Items.Add("列の削除", null, new System.EventHandler(DeleteColumn));
cMenu.Items.Add("値の削除", null, new System.EventHandler(DeleteValue));
for (int i = 0; i < cMenu.Items.Count; i++)
{
cMenu.Items[i].Name = cMenu.Items[i].Text;
}
// テストデータの設定
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
fpSpread1.ActiveSheet.SetValue(i, j, String.Format("R{0}C{1}", i, j));
}
}
}
private void fpSpread1_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
{
// マウスの右ボタンでクリックされた場合
if (e.Button == MouseButtons.Right)
{
// アクティブセルの設定
fpSpread1.ActiveSheet.SetActiveCell(e.Row, e.Column);
// コンテキストメニューの項目を設定
if( e.RowHeader && e.ColumnHeader)
{
// シートコーナーの場合
cMenu.Items["行の削除"].Visible = false;
cMenu.Items["列の削除"].Visible = false;
cMenu.Items["値の削除"].Visible = false;
} else if (e.RowHeader)
{
// 行ヘッダの場合
cMenu.Items["行の削除"].Visible = true;
cMenu.Items["列の削除"].Visible = false;
cMenu.Items["値の削除"].Visible = false;
} else if (e.ColumnHeader)
{
// 列ヘッダの場合
cMenu.Items["行の削除"].Visible = false;
cMenu.Items["列の削除"].Visible = true;
cMenu.Items["値の削除"].Visible = false;
} else if (!e.ColumnFooter)
{
// 通常セルの場合
cMenu.Items["行の削除"].Visible = false;
cMenu.Items["列の削除"].Visible = false;
cMenu.Items["値の削除"].Visible = true;
}
// コンテキストメニューの表示
cMenu.Show(fpSpread1, e.X, e.Y);
}
}
private void DeleteRow(object sender, System.EventArgs e)
{
// RemoveRowsメソッドの呼び出し
fpSpread1.ActiveSheet.RemoveRows(fpSpread1.ActiveSheet.ActiveRowIndex, 1);
}
private void DeleteColumn(object sender, System.EventArgs e)
{
// RemoveColumnsメソッドの呼び出し fpSpread1.ActiveSheet.RemoveColumns(fpSpread1.ActiveSheet.ActiveColumnIndex, 1);
}
private void DeleteValue(object sender, System.EventArgs e)
{
// ClearRangeメソッドの呼び出し
fpSpread1.ActiveSheet.ClearRange(fpSpread1.ActiveSheet.ActiveRowIndex, fpSpread1.ActiveSheet.ActiveColumnIndex, 1, 1, true);
}
private void Form1_Load(object sender, EventArgs e)
{
// コンテキストメニューの作成
cMenu = new ContextMenuStrip();
cMenu.Items.Add("行の削除", null, new System.EventHandler(DeleteRow));
cMenu.Items.Add("列の削除", null, new System.EventHandler(DeleteColumn));
cMenu.Items.Add("値の削除", null, new System.EventHandler(DeleteValue));
for (int i = 0; i < cMenu.Items.Count; i++)
{
cMenu.Items[i].Name = cMenu.Items[i].Text;
}
// テストデータの設定
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
fpSpread1.ActiveSheet.SetValue(i, j, String.Format("R{0}C{1}", i, j));
}
}
}
private void fpSpread1_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
{
// マウスの右ボタンでクリックされた場合
if (e.Button == MouseButtons.Right)
{
// アクティブセルの設定
fpSpread1.ActiveSheet.SetActiveCell(e.Row, e.Column);
// コンテキストメニューの項目を設定
if( e.RowHeader && e.ColumnHeader)
{
// シートコーナーの場合
cMenu.Items["行の削除"].Visible = false;
cMenu.Items["列の削除"].Visible = false;
cMenu.Items["値の削除"].Visible = false;
} else if (e.RowHeader)
{
// 行ヘッダの場合
cMenu.Items["行の削除"].Visible = true;
cMenu.Items["列の削除"].Visible = false;
cMenu.Items["値の削除"].Visible = false;
} else if (e.ColumnHeader)
{
// 列ヘッダの場合
cMenu.Items["行の削除"].Visible = false;
cMenu.Items["列の削除"].Visible = true;
cMenu.Items["値の削除"].Visible = false;
} else if (!e.ColumnFooter)
{
// 通常セルの場合
cMenu.Items["行の削除"].Visible = false;
cMenu.Items["列の削除"].Visible = false;
cMenu.Items["値の削除"].Visible = true;
}
// コンテキストメニューの表示
cMenu.Show(fpSpread1, e.X, e.Y);
}
}
private void DeleteRow(object sender, System.EventArgs e)
{
// RemoveRowsメソッドの呼び出し
fpSpread1.ActiveSheet.RemoveRows(fpSpread1.ActiveSheet.ActiveRowIndex, 1);
}
private void DeleteColumn(object sender, System.EventArgs e)
{
// RemoveColumnsメソッドの呼び出し fpSpread1.ActiveSheet.RemoveColumns(fpSpread1.ActiveSheet.ActiveColumnIndex, 1);
}
private void DeleteValue(object sender, System.EventArgs e)
{
// ClearRangeメソッドの呼び出し
fpSpread1.ActiveSheet.ClearRange(fpSpread1.ActiveSheet.ActiveRowIndex, fpSpread1.ActiveSheet.ActiveColumnIndex, 1, 1, true);
}