|
■No84718 (こんた さん) に返信 > 私の場合は編集不可なドロップダウンリストにしていますが、 > それでも項目選択後にコントロールの背景が青色になっています。
「編集不可なドロップダウンリスト」というのは、 ComboBox の DropDownStyle プロパティを DropDownList にしている、という意味ですね?
ReadOnly 的な意味(ドロップダウンはできるが、選択項目を変更できない)だとしたら、 そのような機能は無かったはずなので。 (VB6 の ComboBox なら、Locked プロパティで制限できるのですが)
> windows7での「コントロール パネル\ハードウェアとサウンド\電源オプション\プラン設定の編集」 > にあるコンボボックスのようにしたいです。
当方の環境(Win7)では、選択後に背景が青になる現象は見られませんでした。
しかし、Application.EnableVisualStyles(); を呼び出さなかった場合は、 選択後に背景が青になるという現象が再現されました。
もしかして、Application.Run の前に EnableVisualStyles の呼び出しが漏れていませんか?
> 皆様、ご解答ありがとうございます。
解答 → 回答
>> private void comboBox1_SelectedIndexChanged(object sender,EventArgs e) >> { >> 他のControl.Select(); >> } > 確かにこれで背景が青くなるのは解決しますが、自作クラスとして作る場合などで > 他のコントロールがない場合はこの方法は無理ではないでしょうか?
他のコントロールをアクティブにするのではなく、 アクティブなコントロールを無くしてしまうという手があります。
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { var f = ((Control)sender).FindForm(); if(ReferenceEquals(sender, f.ActiveControl)) { f.ActiveControl = null; } }
ただ、SelectedIndexChanged イベントを使うのは得策ではないと思います。
[F4] あるいは [Alt]+[↓] あるいは [▼] クリックでのドロップダウン後に キーボード操作で選択する場合に、処理が阻害されてしまうからです。
かわりに、SelectionChangeCommitted イベントもしくは DropDownClosed イベントで処理を行うことを提案します。
なお、ドロップダウンさせずに項目を変更する場合 (キーボードの矢印キー操作、または項目の先頭文字を入力など)は 選択が解除されず、フォーカスが保持されたままとなります。
|