概要
C#でWindowsApplicationを作っていた時、
全体的なデザインをFLATにしてたら
ComboBoxの外枠線が白で、境界が見えにくくなった。
Borderを変えようとしたら、ComboBoxには標準ではついてないのね。
自分で作るか。
実装
ComboBoxを継承したカスタムComboBoxを作る。
サンプルではComboBoxExという名前で作ってます。
んで、WndProcを拾ってPaintしてやる感じに。
サンプルはこんな感じ。
using System; using System.Windows.Forms; using System.Drawing; using System.Data; using System.ComponentModel; namespace hoge { /// <summary> /// ComboBoxEx /// </summary> public class ComboBoxEx : ComboBox { #region ComboBoxのBorderColor/BorderStyle実装 private Color _borderColor = Color.Silver; private ButtonBorderStyle _borderStyle = ButtonBorderStyle.None; private static int WM_PAINT = 0x000F; protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == WM_PAINT) { Graphics g = Graphics.FromHwnd(Handle); Rectangle bounds = new Rectangle(0, 0, Width, Height); ControlPaint.DrawBorder(g, bounds, _borderColor, _borderStyle); } } [Category("Appearance")] public Color BorderColor { get { return _borderColor; } set { _borderColor = value; Invalidate(); } } [Category("Appearance")] public ButtonBorderStyle BorderStyle { get { return _borderStyle; } set { _borderStyle = value; Invalidate(); } } #endregion } }
にしてもなぜ標準でついてないのかね。
ComboBoxってSelectedIndexChangedイベントとかの
動作もおかしかったような気がする。
しかも結構昔から。
みんなカスタムコントロール前提になってるけど標準でどうにかしてほしいな。