セルの編集中に KeyDown イベントを検出するには?
対象製品
MultiRow for Windows Forms 5.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 GrapeCity.Win.MultiRow.EditingControlShowingEventArgs) _
Handles GcMultiRow1.EditingControlShowing
Dim textBox As TextBoxEditingControl = DirectCast(e.Control, TextBoxEditingControl)
If Not textBox Is 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
Private Sub GcMultiRow1_EditingControlShowing(ByVal sender _
As System.Object, ByVal e As GrapeCity.Win.MultiRow.EditingControlShowingEventArgs) _
Handles GcMultiRow1.EditingControlShowing
Dim textBox As TextBoxEditingControl = DirectCast(e.Control, TextBoxEditingControl)
If Not textBox Is 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, GrapeCity.Win.MultiRow.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);
}
private void gcMultiRow1_EditingControlShowing(object sender, GrapeCity.Win.MultiRow.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 イベントと同じです。
この文書は、以前は次のFAQ IDで公開されていました : 11311