5

ToolStripSeparator コントロールの BackColor を変更することは可能ですか? デザイナには BackColor プロパティがありますが、使用されていないようです。色は常に白です。

4

3 に答える 3

5

セパレーターの Paint イベントをこのカスタム proc に指定しました。

    private void mnuToolStripSeparator_Custom_Paint (Object sender, PaintEventArgs e)
    {
        ToolStripSeparator sep = (ToolStripSeparator)sender;

        e.Graphics.FillRectangle(new SolidBrush(CUSTOM_COLOR_BACKGROUND), 0, 0, sep.Width, sep.Height);

        e.Graphics.DrawLine(new Pen(CUSTOM_COLOR_FOREGROUND), 30, sep.Height / 2, sep.Width - 4, sep.Height / 2);

    }

CUSTOM_COLOR_FOREGROUND は、Color.White などのソリッド/名前付きカラーです。

于 2016-07-16T03:19:29.003 に答える
3

デフォルトのtoolstripレンダラーは BackColor プロパティを無視し、ハードコーディングされた色を使用します。

次のリンクを参照して、独自のレンダラーを使用してセパレーターを希望どおりにペイントできます。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        toolStrip1.Renderer = new MyRenderer();
    }
    
    private class MyRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
        {
            if ((e.Item as ToolStripSeparator) == null)
            {
                base.OnRenderSeparator(e);
                return;
            }
            Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
            bounds.Y += 3;
            bounds.Height = Math.Max(0, bounds.Height - 6);
            if (bounds.Height >= 4)
                bounds.Inflate(0, -2);
            int x = bounds.Width / 2;
            using(Pen pen = new Pen(Color.DarkBlue))
                e.Graphics.DrawLine(pen, x, bounds.Top, x, bounds.Bottom - 1);
            using (Pen pen = new Pen(Color.Blue))
                e.Graphics.DrawLine(pen, x + 1, bounds.Top + 1, x + 1, bounds.Bottom);
        }
    }
}

ソース: http://social.msdn.microsoft.com/forums/en-US/winforms/thread/6cceab5b-7e06-40cf-82da-56cdcc57eb5d

于 2013-04-10T12:54:42.410 に答える