セルの編集中にKeyDownイベントを検出するには?

文書番号 : 40474     文書種別 : 使用方法     登録日 : 2017/07/26     最終更新日 : 2017/07/26
文書を印刷する
対象製品
MultiRow for Windows Forms 10.0J
詳細
MultiRowでは、セルの編集時には.NET Frameworkのコントロールを継承した編集コントロールを使用します。
たとえば、TextBoxCellの編集では、編集コントロールのTextBoxEditingControlコントロールが表示され、このコントロールでセルの値を編集します。

そのため、編集中のセルのキー入力はGcMultiRowコントロールのイベントではなく、セルの編集コントロールのイベントとして処理する必要があります。
また、編集コントロールのイベントは、編集コントロールが表示されるときに発生するGcMultiRow.EditingControlShowingイベントで定義する必要があります。

以下のコードでは、TextBoxCellの編集コントロールであるTextBoxEditingControlに対応するKeyDownイベントを定義しています。

[Visual Basic]
Imports GrapeCity.Win.MultiRow

Private Sub GcMultiRow1_EditingControlShowing(ByVal sender _
As System.Object, ByVal e As EditingControlShowingEventArgs) _
Handles GcMultiRow1.EditingControlShowing
    Dim textBox As TextBoxEditingControl = TryCast(e.Control, TextBoxEditingControl)
    If textBox IsNot Nothing Then
        RemoveHandler textBox.KeyDown, AddressOf Me.textBoxEditingControl_KeyDown
        AddHandler textBox.KeyDown, AddressOf Me.textBoxEditingControl_KeyDown
    End If
End Sub

Private Sub textBoxEditingControl_KeyDown(ByVal sender As System.Object, _
ByVal e As KeyEventArgs)
    Console.WriteLine(e.KeyCode)
End Sub

[C#]
using GrapeCity.Win.MultiRow;

private void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e)
{
    TextBoxEditingControl textBox = e.Control as TextBoxEditingControl;
    if (textBox != null)
    {
        textBox.KeyDown -= new KeyEventHandler(textBox_KeyDown);
        textBox.KeyDown += new KeyEventHandler(textBox_KeyDown);
    }
}

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
    Console.WriteLine(e.KeyCode);
}


TextBoxEditingControl.KeyDownイベントはTextBox.KeyDownイベントと同じです。