コンボボックスの使い方について質問です。
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キーを押したときにのみ、コンボが新しい値を設定するようにしたいと思います。