【コンボボックス型セル】【マルチカラムコンボボックス型セル】 Enterキーによりドロップダウンリストが表示されるのを抑止する方法はありますか?
対象製品
SPREAD for Windows Forms 5.0J
詳細
コンボボックス型セルでは、編集中のエディタとしてFpComboクラスが使用されます。FpComboクラスのKeyDownイベントとDropDownイベントを使用して、Enterキーによるドロップダウンリストの表示をキャンセルすることができます。
なお、[Enter]キーによりアクティブセルを右隣に移動させるには、Combo_DropDownイベント内でSendKeys.Send("{Tab}")メソッドを呼び出します。
◎サンプルコード(VB)
◎サンプルコード(C#)
一方で、マルチカラムコンボボックス型セルではSubEditorOpeningイベントを使用してドロップダウンリストの表示を抑止します。なお、マウス操作を除く[Alt]+[下矢印]キーや[F4]キーによるドロップダウンリストも表示されなくなりますので注意が必要です。
コンボボックス型セルと同様に、[Enter]キーによりアクティブセルを右隣に移動させるには、SubEditorOpeningイベント内でSendKeys.Send("{Tab}")メソッドを呼び出します。
◎サンプルコード(VB)
◎サンプルコード(C#)
なお、[Enter]キーによりアクティブセルを右隣に移動させるには、Combo_DropDownイベント内でSendKeys.Send("{Tab}")メソッドを呼び出します。
◎サンプルコード(VB)
Dim bEnterKey As Boolean
Dim WithEvents Combo As New FarPoint.Win.FpCombo()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' 常時入力モードを有効にする
FpSpread1.EditModePermanent = True
' コンボボックス型セルを第2列に設定する
Dim cbCell As New FarPoint.Win.Spread.CellType.ComboBoxCellType()
cbCell.Items = New String() {"123", "456", "789", "abc", "def"}
FpSpread1.ActiveSheet.Columns(1).CellType = cbCell
End Sub
Private Sub FpSpread1_EditModeOn(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOn
' セル型がコンボボックス型の場合は、EditingControlをComboにマッピングする Dim iRow As Integer = FpSpread1.ActiveSheet.ActiveRowIndex
Dim iCol As Integer = FpSpread1.ActiveSheet.ActiveColumnIndex
If TypeOf (FpSpread1.ActiveSheet.GetCellType(iRow, iCol)) Is FarPoint.Win.Spread.CellType.ComboBoxCellType Then
Combo = CType(FpSpread1.EditingControl, FarPoint.Win.FpCombo)
End If
End Sub
Private Sub Combo_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Combo.KeyDown
' Enterキーが押された場合にフラグを立てる
bEnterKey = (e.KeyCode = Keys.Enter)
End Sub
Private Sub Combo_DropDown(ByVal sender As Object, ByVal e As FarPoint.Win.DropDownEventArgs) Handles Combo.DropDown
' フラグが立っている場合は、DropDown処理をキャンセルする
e.Cancel = bEnterKey
bEnterKey = False
' アクティブセルを右隣に移動させる場合は次のコードを有効にする
'SendKeys.Send("{Tab}")
End Sub
Dim WithEvents Combo As New FarPoint.Win.FpCombo()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' 常時入力モードを有効にする
FpSpread1.EditModePermanent = True
' コンボボックス型セルを第2列に設定する
Dim cbCell As New FarPoint.Win.Spread.CellType.ComboBoxCellType()
cbCell.Items = New String() {"123", "456", "789", "abc", "def"}
FpSpread1.ActiveSheet.Columns(1).CellType = cbCell
End Sub
Private Sub FpSpread1_EditModeOn(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOn
' セル型がコンボボックス型の場合は、EditingControlをComboにマッピングする Dim iRow As Integer = FpSpread1.ActiveSheet.ActiveRowIndex
Dim iCol As Integer = FpSpread1.ActiveSheet.ActiveColumnIndex
If TypeOf (FpSpread1.ActiveSheet.GetCellType(iRow, iCol)) Is FarPoint.Win.Spread.CellType.ComboBoxCellType Then
Combo = CType(FpSpread1.EditingControl, FarPoint.Win.FpCombo)
End If
End Sub
Private Sub Combo_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Combo.KeyDown
' Enterキーが押された場合にフラグを立てる
bEnterKey = (e.KeyCode = Keys.Enter)
End Sub
Private Sub Combo_DropDown(ByVal sender As Object, ByVal e As FarPoint.Win.DropDownEventArgs) Handles Combo.DropDown
' フラグが立っている場合は、DropDown処理をキャンセルする
e.Cancel = bEnterKey
bEnterKey = False
' アクティブセルを右隣に移動させる場合は次のコードを有効にする
'SendKeys.Send("{Tab}")
End Sub
◎サンプルコード(C#)
private FarPoint.Win.FpCombo Combo;
private bool bEnterKey;
private void Form1_Load(object sender, EventArgs e)
{
// 常時入力モードを有効にする
fpSpread1.EditModePermanent = true;
//コンボボックス型セルを第2列に設定する
FarPoint.Win.Spread.CellType.ComboBoxCellType cbCell = new FarPoint.Win.Spread.CellType.ComboBoxCellType();
cbCell.Items = new string[] { "123", "456", "789", "abc", "def" };
fpSpread1.ActiveSheet.Columns[1].CellType = cbCell;
}
private void fpSpread1_EditModeOn(object sender, EventArgs e)
{
//セル型がコンボボックス型の場合は、EditingControlをComboにマッピングする int irow = fpSpread1.ActiveSheet.ActiveRowIndex;
int icol = fpSpread1.ActiveSheet.ActiveColumnIndex;
if (fpSpread1.ActiveSheet.GetCellType(irow, icol) is FarPoint.Win.Spread.CellType.ComboBoxCellType)
{
Combo = (FarPoint.Win.FpCombo)fpSpread1.EditingControl;
//Comboのイベントをマッピングする
Combo.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Combo_KeyDown);
Combo.DropDown += new FarPoint.Win.DropDownEventHandler(this.Combo_DropDown);
}
}
private void fpSpread1_EditModeOff(object sender, EventArgs e)
{
int irow = fpSpread1.ActiveSheet.ActiveRowIndex;
int icol = fpSpread1.ActiveSheet.ActiveColumnIndex;
if (fpSpread1.ActiveSheet.GetCellType(irow, icol) is FarPoint.Win.Spread.CellType.ComboBoxCellType)
{
Combo.KeyDown -= new System.Windows.Forms.KeyEventHandler(this.Combo_KeyDown);
Combo.DropDown -= new FarPoint.Win.DropDownEventHandler(this.Combo_DropDown);
}
}
private void Combo_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
//Enterキーが押された場合にフラグを立てる
bEnterKey = (e.KeyCode == Keys.Enter);
}
private void Combo_DropDown(object sender, FarPoint.Win.DropDownEventArgs e)
{
//フラグが立っている場合は、DropDown処理をキャンセルする
e.Cancel = bEnterKey;
bEnterKey = false;
// アクティブセルを右隣に移動させる場合は次のコードを有効にする
//SendKeys.Send("{Tab}");
}
private bool bEnterKey;
private void Form1_Load(object sender, EventArgs e)
{
// 常時入力モードを有効にする
fpSpread1.EditModePermanent = true;
//コンボボックス型セルを第2列に設定する
FarPoint.Win.Spread.CellType.ComboBoxCellType cbCell = new FarPoint.Win.Spread.CellType.ComboBoxCellType();
cbCell.Items = new string[] { "123", "456", "789", "abc", "def" };
fpSpread1.ActiveSheet.Columns[1].CellType = cbCell;
}
private void fpSpread1_EditModeOn(object sender, EventArgs e)
{
//セル型がコンボボックス型の場合は、EditingControlをComboにマッピングする int irow = fpSpread1.ActiveSheet.ActiveRowIndex;
int icol = fpSpread1.ActiveSheet.ActiveColumnIndex;
if (fpSpread1.ActiveSheet.GetCellType(irow, icol) is FarPoint.Win.Spread.CellType.ComboBoxCellType)
{
Combo = (FarPoint.Win.FpCombo)fpSpread1.EditingControl;
//Comboのイベントをマッピングする
Combo.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Combo_KeyDown);
Combo.DropDown += new FarPoint.Win.DropDownEventHandler(this.Combo_DropDown);
}
}
private void fpSpread1_EditModeOff(object sender, EventArgs e)
{
int irow = fpSpread1.ActiveSheet.ActiveRowIndex;
int icol = fpSpread1.ActiveSheet.ActiveColumnIndex;
if (fpSpread1.ActiveSheet.GetCellType(irow, icol) is FarPoint.Win.Spread.CellType.ComboBoxCellType)
{
Combo.KeyDown -= new System.Windows.Forms.KeyEventHandler(this.Combo_KeyDown);
Combo.DropDown -= new FarPoint.Win.DropDownEventHandler(this.Combo_DropDown);
}
}
private void Combo_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
//Enterキーが押された場合にフラグを立てる
bEnterKey = (e.KeyCode == Keys.Enter);
}
private void Combo_DropDown(object sender, FarPoint.Win.DropDownEventArgs e)
{
//フラグが立っている場合は、DropDown処理をキャンセルする
e.Cancel = bEnterKey;
bEnterKey = false;
// アクティブセルを右隣に移動させる場合は次のコードを有効にする
//SendKeys.Send("{Tab}");
}
一方で、マルチカラムコンボボックス型セルではSubEditorOpeningイベントを使用してドロップダウンリストの表示を抑止します。なお、マウス操作を除く[Alt]+[下矢印]キーや[F4]キーによるドロップダウンリストも表示されなくなりますので注意が必要です。
コンボボックス型セルと同様に、[Enter]キーによりアクティブセルを右隣に移動させるには、SubEditorOpeningイベント内でSendKeys.Send("{Tab}")メソッドを呼び出します。
◎サンプルコード(VB)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' データの作成
Dim dt As New DataTable("TEST")
dt.Columns.Add("Code", GetType(Int32))
dt.Columns.Add("Name", GetType(String))
dt.Rows.Add(100, "AAA")
dt.Rows.Add(200, "BBB")
dt.AcceptChanges()
' マルチカラムコンボボックス型セルの作成
Dim comboCell As New FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType()
comboCell.DataSourceList = dt
' SPREADの設定
FpSpread1.EditModePermanent = True
FpSpread1.ActiveSheet.Columns(1).CellType = comboCell
FpSpread1.ActiveSheet.SetColumnWidth(1, 120)
End Sub
Private Sub FpSpread1_SubEditorOpening(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.SubEditorOpeningEventArgs) Handles FpSpread1.SubEditorOpening
' マルチカラムコンボボックス型セルの場合
If TypeOf FpSpread1.ActiveSheet.GetCellType(e.Row, e.Column) Is FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType Then
' キー操作によってドロップダウンリストが表示される場合
If FarPoint.Win.Spread.FpSpread.MouseButtons = Windows.Forms.MouseButtons.None Then
' ドロップダウンリストの表示をキャンセル
e.Cancel = True
' アクティブセルを右隣に移動させる場合は次のコードを有効にする
'SendKeys.Send("{Tab}")
End If
End If
End Sub
' データの作成
Dim dt As New DataTable("TEST")
dt.Columns.Add("Code", GetType(Int32))
dt.Columns.Add("Name", GetType(String))
dt.Rows.Add(100, "AAA")
dt.Rows.Add(200, "BBB")
dt.AcceptChanges()
' マルチカラムコンボボックス型セルの作成
Dim comboCell As New FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType()
comboCell.DataSourceList = dt
' SPREADの設定
FpSpread1.EditModePermanent = True
FpSpread1.ActiveSheet.Columns(1).CellType = comboCell
FpSpread1.ActiveSheet.SetColumnWidth(1, 120)
End Sub
Private Sub FpSpread1_SubEditorOpening(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.SubEditorOpeningEventArgs) Handles FpSpread1.SubEditorOpening
' マルチカラムコンボボックス型セルの場合
If TypeOf FpSpread1.ActiveSheet.GetCellType(e.Row, e.Column) Is FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType Then
' キー操作によってドロップダウンリストが表示される場合
If FarPoint.Win.Spread.FpSpread.MouseButtons = Windows.Forms.MouseButtons.None Then
' ドロップダウンリストの表示をキャンセル
e.Cancel = True
' アクティブセルを右隣に移動させる場合は次のコードを有効にする
'SendKeys.Send("{Tab}")
End If
End If
End Sub
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
// データの作成
DataTable dt = new DataTable("TEST");
dt.Columns.Add("Code", Type.GetType("System.Int32"));
dt.Columns.Add("Name", Type.GetType("System.String"));
dt.Rows.Add(100, "AAA");
dt.Rows.Add(200, "BBB");
dt.AcceptChanges();
// マルチカラムコンボボックス型セルの作成
FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType comboCell = new FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType();
comboCell.DataSourceList = dt;
// SPREADの設定
fpSpread1.EditModePermanent = true;
fpSpread1.ActiveSheet.Columns[1].CellType = comboCell;
fpSpread1.ActiveSheet.SetColumnWidth(1, 120);
}
private void fpSpread1_SubEditorOpening(object sender, FarPoint.Win.Spread.SubEditorOpeningEventArgs e)
{
// マルチカラムコンボボックス型セルの場合
if (fpSpread1.ActiveSheet.GetCellType(e.Row, e.Column) is FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType)
{
// キー操作によってドロップダウンリストが表示される場合
if (FarPoint.Win.Spread.FpSpread.MouseButtons == System.Windows.Forms.MouseButtons.None)
{
// ドロップダウンリストの表示をキャンセル
e.Cancel = true;
// アクティブセルを右隣に移動させる場合は次のコードを有効にする
//SendKeys.Send("{Tab}");
}
}
}
{
// データの作成
DataTable dt = new DataTable("TEST");
dt.Columns.Add("Code", Type.GetType("System.Int32"));
dt.Columns.Add("Name", Type.GetType("System.String"));
dt.Rows.Add(100, "AAA");
dt.Rows.Add(200, "BBB");
dt.AcceptChanges();
// マルチカラムコンボボックス型セルの作成
FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType comboCell = new FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType();
comboCell.DataSourceList = dt;
// SPREADの設定
fpSpread1.EditModePermanent = true;
fpSpread1.ActiveSheet.Columns[1].CellType = comboCell;
fpSpread1.ActiveSheet.SetColumnWidth(1, 120);
}
private void fpSpread1_SubEditorOpening(object sender, FarPoint.Win.Spread.SubEditorOpeningEventArgs e)
{
// マルチカラムコンボボックス型セルの場合
if (fpSpread1.ActiveSheet.GetCellType(e.Row, e.Column) is FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType)
{
// キー操作によってドロップダウンリストが表示される場合
if (FarPoint.Win.Spread.FpSpread.MouseButtons == System.Windows.Forms.MouseButtons.None)
{
// ドロップダウンリストの表示をキャンセル
e.Cancel = true;
// アクティブセルを右隣に移動させる場合は次のコードを有効にする
//SendKeys.Send("{Tab}");
}
}
}
関連情報
- 編集終了時にコンボボックス型セルに入力した文字列が消えてしまいます
- 【コンボボックス型セル】【マルチカラムコンボボックス型セル】コードによってドロップダウンリストを表示させることはできますか
- コンボボックス型セルのデータの扱いについて
- 【Tips】コンボボックス型セルの基本的な使用例
- 【コンボボックス型セル】 初期値を設定したい
キーワード
「コンボボックス型セル/マルチカラムコンボボックス型セル」