ComponentOne Studioに収録されているグリッドコントロール「FlexGrid for WinForms」では、では、いろいろなデータ型を指定して、使いやすく柔軟なグリッドを構築したり、データを編集したりすることができます。
データの入力を開始すると、グリッドは「編集状態」となり、テキストボックスやコンボボックスなど編集用の内部エディタを使用してデータを表示します。このエディタには、そのままで簡単に使えるようあらかじめデフォルトの動作が既定されていますが、案件によってはこれ以外に独自の動作を行わせたい場合があります。
このようなときに役立つのが、C1FlexGridのSetUpEditor
イベントです。
このイベントはグリッドが編集状態になると発生し、イベント内でエディタオブジェクトにアクセス可能なので、そのプロパティを設定することでエディタの動作をカスタマイズできます。
(ケース1)編集開始時に、自動的にドロップダウンを開く
コンボボックス型のセルにフォーカスが移動した場合、デフォルトでは、コンボボックスの▼をクリックしないとドロップダウンは開きません。
この動作を、フォーカスが移動してきた時点でドロップダウンが開くように変更するには、AfterSelChange
イベントでStartEditing
メソッドを実行したのち、SetupEditor
イベントで、ComboBoxのDroppedDown
プロパティをtrueに設定します。
[C#]
private void c1FlexGrid_AfterSelChange(object sender, RangeEventArgs e)
{
if (e.Col == 1) {
c1FlexGrid.StartEditing();
}
}
private void c1FlexGrid_SetupEditor(object sender, RowColEventArgs e)
{
if (e.Col == 1) {
ComboBox combo = (ComboBox)c1FlexGrid.Editor;
combo.DroppedDown = true;
}
}
[VB]
Private Sub C1FlexGrid_AfterSelChange(sender As Object, e As RangeEventArgs)
If e.Col = 1 Then
C1FlexGrid.StartEditing()
End If
End Sub
Private Sub C1FlexGrid_SetupEditor(sender As Object, e As RowColEventArgs)
If e.Col = 1 Then
Dim combo As ComboBox = CType(C1FlexGrid.Editor, ComboBox)
combo.DroppedDown = True
End If
End Sub
(ケース2)列によってIMEを切り替える
FlexGridでは、ImeMode
プロパティを使用してグリッド全体のIMEモードを設定することができます。
列ごとにひらがな入力や英数字入力などIMEモードを指定するには、SetupEditor
イベント内で、列を指定してIMEモードの切り替えを行います。
[C#]
private void c1FlexGrid1_SetupEditor(object sender, RowColEventArgs e)
{
switch (e.Col)
{
case 1:
c1FlexGrid1.ImeMode = ImeMode.Hiragana;
break;
case 2:
c1FlexGrid1.ImeMode = ImeMode.Katakana;
break;
case 3:
c1FlexGrid1.ImeMode = ImeMode.KatakanaHalf;
break;
default:
c1FlexGrid1.ImeMode = ImeMode.Off;
break;
}
}
[VB]
Private Sub C1FlexGrid1_SetupEditor(sender As Object, e As RowColEventArgs)
Select Case e.Col
Case 1
' 1列目はひらがな
C1FlexGrid1.ImeMode = ImeMode.Hiragana
Exit Select
Case 2
' 2列目はカタカナ
C1FlexGrid1.ImeMode = ImeMode.Katakana
Exit Select
Case 3
' 3列目は半角カタカナ
C1FlexGrid1.ImeMode = ImeMode.KatakanaHalf
Exit Select
Case Else
' 上記以外はIMEオフ
C1FlexGrid1.ImeMode = ImeMode.Off
Exit Select
End Select
End Sub
※このコードを用いると、編集を開始した時点でIMEモードが切り替わります。
列移動と同時に(編集開始前に)IMEモードを切り替えるには、BeforeEdit
イベントを使用してください。
(ケース3)数値型セルで、左寄せで編集する
数値型セルのスタイルを左寄せに設定しても、編集時にはデフォルトで右寄せになります。表示時も編集中も左寄せにするには、SetupEditor
イベントで内部エディタであるTextBoxを取得し、そのTextAlign
プロパティをHorizontalAlignment.Left
に設定します。
[C#]
private void c1FlexGrid1_SetupEditor(object sender, RowColEventArgs e)
{
if (e.Col == 1) {
TextBox tb = c1FlexGrid1.Editor;
tb.TextAlign = HorizontalAlignment.Left;
}
}
[VB]
Private Sub C1FlexGrid1_SetupEditor(sender As Object, e As RowColEventArgs) Handles fg.SetupEditor
If e.Col = 1 Then
Dim tb As TextBox = C1FlexGrid1.Editor
tb.TextAlign = HorizontalAlignment.Left
End If
End Sub
(ケース4)日付型セルに表示されるチェックボックスを消す
セルのデータ型をDatetimeに設定すると、編集時にデフォルトでチェックボックスが表示されます。
このチェックボックスを非表示にするには、SetupEditor
イベントで、内部エディタであるDateTimePickerを取得し、そのShowCheckBox
プロパティをFalseに設定します。
[C#]
private void C1FlexGrid1_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if (e.Col == 1) {
DateTimePicker dt = (DateTimePicker)C1FlexGrid1.Editor;
dt.ShowCheckBox = false;
}
}
[VB]
Private Sub C1FlexGrid1_SetupEditor(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.SetupEditor
If e.Col = 1 Then
Dim dt As DateTimePicker = CType(C1FlexGrid1.Editor, DateTimePicker)
dt.ShowCheckBox = False
End If
End Sub
ここでご紹介したケース以外にも、
- 文字数単位で入力を制限する
- 大文字に変換して入力する
など、数多くの実装例が製品ヘルプに記載されていますので、ご参照ください。
◇FlexGrid for WinForms製品ヘルプ