ComponentOne Information

ComponentOne Studio/Wijmo/Xuniの最新情報を公開中

FlexGridで改良できるグリッドビューのセル編集方式 ― Windows フォーム編

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

 

f:id:ComponentOne_JP:20170809162642p:plain

(ケース2)列によってIMEを切り替える

FlexGridでは、ImeModeプロパティを使用してグリッド全体のIMEモードを設定することができます。
列ごとにひらがな入力や英数字入力などIMEモードを指定するには、SetupEditorイベント内で、列を指定してIMEモードの切り替えを行います。

[C#]

private void c1FlexGrid1_SetupEditor(object sender, RowColEventArgs e)
{
  switch (e.Col)
  {
    case 1: // 1列目はひらがな
      c1FlexGrid1.ImeMode = ImeMode.Hiragana;
      break;
    case 2: // 2列目はカタカナ
      c1FlexGrid1.ImeMode = ImeMode.Katakana;
      break;
    case 3: // 3列目は半角カタカナ
      c1FlexGrid1.ImeMode = ImeMode.KatakanaHalf;
      break;
    default: // 上記以外はIMEオフ
      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に設定すると、編集時にデフォルトでチェックボックスが表示されます。

f:id:ComponentOne_JP:20170809162802p:plain


このチェックボックスを非表示にするには、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

f:id:ComponentOne_JP:20170809162949p:plain

ここでご紹介したケース以外にも、

  • 文字数単位で入力を制限する
  • 大文字に変換して入力する

など、数多くの実装例が製品ヘルプに記載されていますので、ご参照ください。

◇FlexGrid for WinForms製品ヘルプ

 

ComponentOne