5

こんにちは、コンボ ボックス コントロールのフラットスタイルをフラットに設定しました。

このコントロールの周りに境界線を引くことは可能ですか?

コントロールには、borderstyle プロパティがありません。任意の提案をいただければ幸いです。補足: 可能であれば、フラット スタイルをフラットに保ちたいと考えています。

4

2 に答える 2

14

カスタム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メソッドもあります。必要に応じて使用してください。

于 2012-11-04T18:43:52.807 に答える
7

パネルに配置し、パネルにボーダーを設定し、パネルにcmbボックスを配置し、cmbボックスをドックフィルに設定し、ボーダースタイルをフラットに設定します。シンプルですが、それほどエレガントではないソリューションです。

于 2012-11-04T20:37:41.693 に答える