コンボコントロールのKeyDownイベントでキーイベントを無効にしても、項目選択の動作を無効にできない

文書番号 : 39527     文書種別 : 不具合     登録日 : 2016/08/22     最終更新日 : 2016/11/25
文書を印刷する
対象製品
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;
    }
}