セルの編集中にKeyDownイベントを検出するには?
対象製品
MultiRow for Windows Forms 10.0J
詳細
MultiRowでは、セルの編集時には.NET Frameworkのコントロールを継承した編集コントロールを使用します。
たとえば、TextBoxCellの編集では、編集コントロールのTextBoxEditingControlコントロールが表示され、このコントロールでセルの値を編集します。
そのため、編集中のセルのキー入力はGcMultiRowコントロールのイベントではなく、セルの編集コントロールのイベントとして処理する必要があります。
また、編集コントロールのイベントは、編集コントロールが表示されるときに発生するGcMultiRow.EditingControlShowingイベントで定義する必要があります。
以下のコードでは、TextBoxCellの編集コントロールであるTextBoxEditingControlに対応するKeyDownイベントを定義しています。
[Visual Basic]
[C#]
TextBoxEditingControl.KeyDownイベントはTextBox.KeyDownイベントと同じです。
たとえば、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イベントと同じです。