0

コンボボックスの使い方について質問です。

1)次のようなクラスからコンボボックスを参照する必要があります:

If Me.ActiveControl.GetType Is GetType(ComboBox) And combodroppeddown = False) Then
   something...
End If

ここから、このコンボボックスがドロップダウンされているかどうかを確認するために AND から直接取得する必要がありますが、方法がわかりません。

2)コンボボックスの実際のタイプは「DropDownList」タイプです。
問題は、ドロップダウンして上下キーで入力すると、選択した行に従って値が変更されることです。次にESCを押すと、最後の値が選択されたままになり、不要なものが選択されます。

リストがドロップされたときにESCを押すと、ドロップした瞬間から元の値を返す方法はありますか?
どうやってするか?

2番目の質問で助けを得るために、私のxComboサブクラスを詳しく見てみましょう...

Public Class xAutoCombo
Inherits ComboBox

Private entertext As String

Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)

    If e.Control Then ' this dropped a list with keyboard
        If e.KeyCode = Keys.Down Then
            Me.DroppedDown = True
        End If
    End If

    '' this should return value back if ESC was pressed
    '' but don't work!
    If Me.DroppedDown And e.KeyCode = Keys.Escape Then 
        Me.Text = entertext
    End If

    MyBase.OnKeyDown(e)
End Sub

Protected Overrides Sub OnDropDown(ByVal e As System.EventArgs)

    entertext = Me.Text '' this remember text in moment of droping
    MyBase.OnDropDown(e)
End Sub

編集:
ここで、解決したい機能の問題が1つ見つかりました。
コンボがドロップされ、キーボードでリストをナビゲートし、マウスで押してフォーム (またはコンボの外) にすると、リストが閉じられ、最後に選択された値が設定されます。

その代わりに、マウスでクリックしてリストに表示するか、キーボードでEnterキーを押したときにのみ、コンボが新しい値を設定するようにしたいと思います。

4

1 に答える 1