【发布时间】:2012-11-04 17:53:30
【问题描述】:
您好,我已将组合框控件的平面样式设置为平面。
可以在这个控件周围画边框吗?
该控件没有borderstyle 属性。任何建议,将不胜感激。旁注:如果可能的话,我希望保持扁平风格。
【问题讨论】:
-
控件的父级可以在其 Paint 事件处理程序中围绕它绘制边框。
您好,我已将组合框控件的平面样式设置为平面。
可以在这个控件周围画边框吗?
该控件没有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 框设置为停靠填充和边框样式 flat.simple 但不是那么优雅的解决方案。
【讨论】: