BeforeColEdit イベントを使用してTrueDBGrid for WindowsForms コントロールの編集操作をカスタマイズすることができます。BeforeColEdit は、他の編集イベントより前に発生するため、編集を開始する前に、事実上どのような操作を行うこともできます。たとえば、編集の要求をキャンセルして、組み込みテキストエディタの代わりに独自のドロップダウンリストボックスを表示できます。
C1TrueDBGrid コントロールでは、次の4つの方法で編集モードに入ることができます。
1、2、および3の方法では BeforeColEdit イベントが発生しますが、4の方法ではこのイベントが発生しません。TrueDBGrid for WindowsForms では、コードからの要求をキャンセルすることはないとしています。
ユーザーの編集要求でマウスとキーボードのどちらが使用されたかを判別できます。そのために、BeforeColEdit イベントの引数の1つに KeyChar があります。この引数は、ユーザーがセルをクリックして編集を開始すると0に、文字を入力すると ASCII 文字の1つに設定されます。
BeforeColEdit が発生したとき、ASCII 文字はまだ現在のセルに置かれていません。そのため、BeforeColEdit で編集をキャンセルすると、ASCII キーは破棄されます。これは便利なテクニックです。
Done という名前のブール値フィールドがあり、その表示書式として NumberFormat プロパティを Yes/No に設定しているとします。この場合に、ユーザーが Y キーまたは N キーを押すと、編集モードに入るのではなく、ただちにセルのコンテンツを変更するとします。BeforeColEdit で次のコードを使用すると、これらの動作を実行できます。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Private Sub C1TrueDBGrid1_BeforeColEdit(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) Handles C1TrueDBGrid1.BeforeColEdit
With Me.C1TrueDBGrid1.Columns(e.ColIndex)
' これが「Done」列でないか、ユーザーがマウスでクリックした場合は、そのまま続行します
If .DataField <> "Done" Or e.KeyChar = Chr(0) Then Exit Sub
' 通常の編集をキャンセルし、KeyAscii に基づく適切な結果をフィールドに設定します。無効な文字が入力された場合は、ビープ音を鳴らします。
e.Cancel = True
Select Case UCase(e.KeyChar)
Case "Y"
.Value = -1
Case "N"
.Value = 0
Case Else
Beep()
End Select
End With
End Sub
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void C1TrueDBGrid1_BeforeColEdit( object sender, C1.Win.C1TrueDBGrid.BeforeColEditEventArgs e)
{
C1.Win.C1DataColumn col = e.Column.DataColumn;
// これが「Done」列でないか、ユーザーがマウスでクリックした場合は、そのまま続行します
if (col.DataField != "Done" || e.KeyChar == 0 ) return;
// 通常の編集をキャンセルし、KeyAscii に基づく適切な結果をフィールドに設定します。無効な文字が入力された場合は、ビープ音を鳴らします。
e.Cancel = true;
switch (e.KeyChar. .ToUpper())
{
case "Y";
Col.Value = -1;
break;
case "N";
Col.Value = 0;
default:;
Beep();
}
}
|
|
KeyAscii が0の場合はイベントハンドラが終了します。したがって、マウスを使って編集することもできます。