|
分類:[VB.NET/VB2005]
お世話になります。
VB2005 Windowsフォームです。
現在、2つのComboBoxをフォームに置き
お互いに選択されている値が連動する様
SelectedIndexChangedイベントで
もう一方のSelectedIndexを設定しています。
そこに値の選択の効率化の為
特定のキーを押すと自動的にその項目が設定される
という動きをKeyDownイベントで設定しました。
それでうまく動いている様に見えたのですが、
コンボボックスのリストを開いた状態で
特定のキーを押して自動的に項目が設定し、
連動してもう一方のコンボボックスにも値が設定された後、
そのままESCキーを押すとリストが閉じると同時に
コンボの値が変更前の値に戻ってしまい
2つのコンボの値がずれてしまいました。
(Tabでフォーカス移動した場合やマウスでコンボを閉じた時も
同様な動きになりました)
何かSelectedIndexChangedでIndexを設定した際に
選択内容を確定(?)させるような事は出来ないのでしょうか?
(↑↓キーで項目の選択内容を動かした時の様に
変更した後にESCキー等を押されても値が元に戻らないように
したいのですが)
ものすごく簡単に書くと下記のようなコードなのですが、、、
よろしくお願いします。
Public Class Form1
Private Sub ComboBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
Select Case e.KeyCode
Case Keys.D1, Keys.NumPad1
ComboBox1.SelectedIndex = 1
e.Handled = True
Case Keys.D2, Keys.NumPad2
ComboBox1.SelectedIndex = 2
e.Handled = True
Case Keys.D3, Keys.NumPad3
ComboBox1.SelectedIndex = 3
e.Handled = True
Case Keys.D4, Keys.NumPad4
ComboBox1.SelectedIndex = 4
e.Handled = True
Case Keys.D5, Keys.NumPad5
ComboBox1.SelectedIndex = 5
e.Handled = True
End Select
End Sub
Private comboFlg As Boolean = False
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
If comboFlg Then Return
comboFlg = True
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
comboFlg = False
End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
If comboFlg Then Return
comboFlg = True
ComboBox1.SelectedIndex = ComboBox2.SelectedIndex
comboFlg = False
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox1.Items.Add("")
ComboBox1.Items.Add("1番目")
ComboBox1.Items.Add("2番目")
ComboBox1.Items.Add("3番目")
ComboBox1.Items.Add("4番目")
ComboBox1.Items.Add("5番目")
ComboBox2.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox2.Items.Add("")
ComboBox2.Items.Add("1番目の内容は○")
ComboBox2.Items.Add("2番目の内容は△")
ComboBox2.Items.Add("3番目の内容は□")
ComboBox2.Items.Add("4番目の内容は◇")
ComboBox2.Items.Add("5番目の内容は×")
End Sub
End Class
|