こんにちは、コンボ ボックス コントロールのフラットスタイルをフラットに設定しました。
このコントロールの周りに境界線を引くことは可能ですか?
コントロールには、borderstyle プロパティがありません。任意の提案をいただければ幸いです。補足: 可能であれば、フラット スタイルをフラットに保ちたいと考えています。
カスタムComboBoxコントロールを作成し、そのWndProc
メソッドをオーバーライドします。ControlPaint.DrawBorderメソッドを使用して簡単に境界線を描くことができます。
public class ComboBoxWithBorder : ComboBox
{
private Color _borderColor = Color.Black;
private ButtonBorderStyle _borderStyle = ButtonBorderStyle.Solid;
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(); // causes control to be redrawn
}
}
[Category("Appearance")]
public ButtonBorderStyle BorderStyle
{
get { return _borderStyle; }
set
{
_borderStyle = value;
Invalidate();
}
}
}
ところで、境界線の幅を設定できるオーバーロードされたDrawBorderメソッドもあります。必要に応じて使用してください。
パネルに配置し、パネルにボーダーを設定し、パネルにcmbボックスを配置し、cmbボックスをドックフィルに設定し、ボーダースタイルをフラットに設定します。シンプルですが、それほどエレガントではないソリューションです。