DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ComboBoxのItemの選択について

分類:[.NET]

はじめまして、早速質問ですが、
FormにComboBoxのみが配置されていて
ComboBoxのItemを選択するとそのItemを
MsgBoxで表示するという事をしたいのですが
ComboBoxにフォーカスがあるときに↑Keyや
↓Keyを押してもSelectedIndexChengedイベントが
発生してMsgBoxが表示されてしまいます。
ComboBoxのItemをマウスクリックのみで選択可能に
するにはどのようにすれば良いですか?
よろしくお願いいたします。
■No695に返信(tabさんの記事)
> ComboBoxのItemをマウスクリックのみで選択可能に
> するにはどのようにすれば良いですか?

上下カーソルキーを無視する方法ということで回答させていただきます。

まずはComboBoxの派生クラスを作成し、WndProcをオーバーライドして、上下カーソルキーを無視するようにするという方法が考えられます。

しかし初心者の人であればKeyDownイベントハンドラで上下カーソルキーを無視するという方法で十分ではないでしょうか。

private void comboBox1_KeyDown(object sender,
System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Up)
e.Handled = true;
}
■No696に返信(管理人さんの記事)
早速のご返答ありがとうございます。
早速試しに下記コードを書いてみました。
(質問事項にVB.NETを書くのを忘れていました。申し訳ありません。)

Private Sub ComboBox1_KeyDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown

   If e.KeyCode = Keys.Down Or e.KeyCode = Keys.Up Then
     e.Handled = True
   End If

End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles _
ComboBox1.SelectedIndexChanged

    MsgBox(ComboBox1.SelectedItem)

End Sub

ところが、相変わらず↑キー↓キーが反応してしまいます。
e.Handled=Trueの代わりにMsgBox("OK")とするとComboBoxの
ItemがMsgBoxに表示された後に「OK」が表示されます。
ということは、ComboBox1のSelectedIndexChengedが処理されてから
Key_Downが処理されているということでしょうか?
申し訳ありませんが、もう一度教えていただけませんか?
■No700に返信(tabさんの記事)
> ところが、相変わらず↑キー↓キーが反応してしまいます。

私の環境(Win2000, .NET Framework1.1)ではこれでうまく行っているので、もしかしたら環境によってイベントの発生する順番が違うのでしょうか?

となると前に書いたようにComboBoxの派生クラスを作成する方法しかないかもしれませんね。
こんにちは、tabさん、管理人さん。ピラルクです。

> もしかしたら環境によってイベントの発生する順番が違うのでしょうか?

違うようですね。

1.0 → ComboBox1_SelectedIndexChanged が来てから ComboBox1_KeyDown
1.1 → ComboBox1_KeyDown が来てから ComboBox1_SelectedIndexChanged

となりました。(@_@)

ComboBox1_KeyDown が先で普通でしょうからBugFixされたのだと思われます。
(web上でDocument発見できなかったけど、どこにあるのかな)

# 痛いBugだなぁ〜。1.0のUIシステムは鬼門かなぁ。。。
■No707に返信(ピラルクさんの記事)

ピラルクさんありがとうございます。

> 1.0 → ComboBox1_SelectedIndexChanged が来てから ComboBox1_KeyDown
> 1.1 → ComboBox1_KeyDown が来てから ComboBox1_SelectedIndexChanged
>
> となりました。(@_@)
>
い、痛いですねぇ。
ComboBoxを利用したランチャーソフトを作ってたのですが、これでは
↓や↑キーを押すたびに起動してしまいますね。
はじめての割には、なかなかの出来だったのに。。。
でもまだ、ComboBoxの派生クラスですか?を使うことで何とかなるのでしょうか?
もしそうなら、もっと勉強して何とか完成させてみたいです。
本当にありがとうございました。
また、ご教授お願いいたします。
■No709に返信(tabさんの記事)
管理人さん、ピラルクさん、
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板