C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

コンボボックスの挙動について


(過去ログ 33 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■16646 / inTopicNo.1)  コンボボックスの挙動について
  
□投稿者/ Hs (1回)-(2008/04/09(Wed) 10:39:24)

分類:[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

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -