コンボコントロールのKeyDownイベントでキーイベントを無効にしても、項目選択の動作を無効にできない
対象製品
InputMan for Windows Forms 8.0J
状況
修正済み
詳細
コンボコントロールのKeyDownイベントで、イベントパラメータのHandledおよびSuppressKeyPressプロパティをTrueに設定しても、[Up]、[Down]、[PageUp]、[PageDown]、[Home]、[End]キーの動作を制御できず、これらのキーが押下されると、リストから項目が選択されてしまいます。
この現象はコンボコントロールのほか、マスクコンボコントロール、リストコントロール、およびラッパーコンボ、ラッパーリストコントロールでも発生します。
この現象はコンボコントロールのほか、マスクコンボコントロール、リストコントロール、およびラッパーコンボ、ラッパーリストコントロールでも発生します。
回避方法
この問題はService Pack 2(v8.0.2016.1125)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 2より前のバージョンでは次の方法で回避可能です。
FormのKeyPreviewプロパティをTrueに設定し、FormのKeyDownイベントにてキーの操作を禁止することで回避します。
[Visual Basic]
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.KeyPreview = True
・
・
・
End Sub
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
If (e.KeyCode = Keys.Up OrElse e.KeyCode = Keys.Down OrElse _
e.KeyCode = Keys.PageUp OrElse e.KeyCode = Keys.PageDown OrElse _
e.KeyCode = Keys.Home OrElse e.KeyCode = Keys.End) AndAlso _
Me.ActiveControl Is GcComboBox1 Then
e.SuppressKeyPress = True
End If
End Sub
[C#]
private void Form1_Load(object sender, EventArgs e)
{
this.KeyPreview = true;
・
・
・
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode == Keys.Up || e.KeyCode == Keys.Down ||
e.KeyCode == Keys.PageUp || e.KeyCode == Keys.PageDown ||
e.KeyCode == Keys.Home || e.KeyCode == Keys.End) &&
this.ActiveControl == gcComboBox1)
{
e.SuppressKeyPress = true;
}
}
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 2より前のバージョンでは次の方法で回避可能です。
FormのKeyPreviewプロパティをTrueに設定し、FormのKeyDownイベントにてキーの操作を禁止することで回避します。
[Visual Basic]
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.KeyPreview = True
・
・
・
End Sub
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
If (e.KeyCode = Keys.Up OrElse e.KeyCode = Keys.Down OrElse _
e.KeyCode = Keys.PageUp OrElse e.KeyCode = Keys.PageDown OrElse _
e.KeyCode = Keys.Home OrElse e.KeyCode = Keys.End) AndAlso _
Me.ActiveControl Is GcComboBox1 Then
e.SuppressKeyPress = True
End If
End Sub
[C#]
private void Form1_Load(object sender, EventArgs e)
{
this.KeyPreview = true;
・
・
・
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode == Keys.Up || e.KeyCode == Keys.Down ||
e.KeyCode == Keys.PageUp || e.KeyCode == Keys.PageDown ||
e.KeyCode == Keys.Home || e.KeyCode == Keys.End) &&
this.ActiveControl == gcComboBox1)
{
e.SuppressKeyPress = true;
}
}