ComboBoxをDropDownListにすると背景がグレーになってしまうのを白くする方法

WPFではなくWindowsフォームの話になります。コンボボックスのDropDownStyleプロパティをDropDownListにすると、自動的に背景色がグレーになってしまって、ぱっと見、操作できないんじゃないかと勘違いしそうですよね…。かといって、FlatStyleプロパティをFlatとかにして背景色を白に指定すると枠が消えてデザイン的にこれじゃないような。こんなお悩みないでしょうか。今回はこの悩みを解決する方法になります。

VisualStudio2022、C#プログラミング、Windowsフォームアプリで説明していきます。Windows10での出来上がりイメージはこんなかんじ😊↓

新しいプロジェクトの作成で「Windowsフォームアプリ(C#)」を選択します。.NETでも.Net Frameworkでもどちらでも大丈夫だと思います。今回の画像の例は、.NET(.NET8.0)ですすめています。VB.NETは未検証。
やり方の概要としては、ComboBoxのカスタムコントロールを作って、OnDrawItemをオーバーライドさせる方法になります。

①まずは、フォームだけのまっさらなプロジェクトを作成します。

②画面右側のソリューションエクスプローラーで、プロジェクトの名前「WinFormsApp1」を右クリック→「追加」→「新しい項目」を選択します。

③一覧から「カスタムコントロール」を探し、下の名前欄に「ComboBoxEx」と入力し「追加」を押します。

④ソリューションエクスプローラーのツリーに「ComboBoxEx」が追加されます。画面上の「コードビューに切り替えます」をクリック。

⑤コード内の「Control」→「ComboBox」に打ち直します。あと、必要ないので赤で囲んだ部分を削除します。残しておきたい人はそのままでもOKです。

⑥削除したところに次のようなコードを打ち込み、画面上部のメニューから「ビルド」→「ソリューションビルド」をします。コピペできるようにコードも張り付けておきます。

        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            e.DrawBackground();
            e.DrawFocusRectangle();
            if (e.Index >= 0)
            {
                Brush b = new SolidBrush(e.ForeColor);
                e.Graphics.DrawString(Items[e.Index].ToString(),
                    e.Font, b, e.Bounds, StringFormat.GenericDefault);
                b.Dispose();
            }
            base.OnDrawItem(e);
        }

つづきは「次のページ」で

コメント