Горизонтальный разделитель StatusStrip

В Windows.Forms приложение, я хочу изменить цвет горизонтальной разделительной линии StatusStripили сделайте эту строку невидимой. Есть идеи?

Это я имею в виду:

файл: Program.cs

using System;
using System.Data;
using System.Drawing;
using System.Data.Linq;
using System.Windows.Forms;

namespace test {
    class Program {

        [STAThread]

        static void Main() {
            Application.Run(new FormMain());
        }
    }
}

файл: FormMain.cs

using System;
using System.Data;
using System.Drawing;
using System.Data.Linq;
using System.Windows.Forms;

namespace test {
    class Vars {
        public class Colors {
            public static Color BackRed = Color.FromArgb(040, 000, 000);
            public static Color ForeRed = Color.FromArgb(240, 120, 120);
            public static Color BackGrn = Color.FromArgb(000, 040, 000);
            public static Color ForeGrn = Color.FromArgb(120, 240, 120);
            public static Color BackBlu = Color.FromArgb(000, 000, 040);
            public static Color ForeBlu = Color.FromArgb(120, 120, 240);
        }
    }

    class FormMain : Form {
        MenuStrip menuStrip = new MenuStrip();
        StatusStrip statusStrip = new StatusStrip();

        public FormMain() {
            this.FormMain_Setup();
        }

        private void FormMain_Setup() {
            this.Top = 20;
            this.Left = 20;
            this.Width = 1200;
            this.Height = 675;
            this.BackColor = Vars.Colors.BackBlu;
            this.ForeColor = Vars.Colors.ForeBlu;
            this.MaximizeBox = false;
            this.StartPosition = FormStartPosition.Manual;
            this.FormBorderStyle = FormBorderStyle.Fixed3D;
            this.KeyDown += FormMain_KeyDown;
            this.FormMain_MenuStrip_Setup();
            this.FormMain_StatusStrip_Setup();
        }

        private void FormMain_StatusStrip_Setup() {
            this.statusStrip.Height = 30;
            this.statusStrip.AutoSize = false;
            this.statusStrip.BackColor = Vars.Colors.BackRed;
            this.statusStrip.ForeColor = Vars.Colors.ForeRed;
            this.statusStrip.SizingGrip = false;
            this.Controls.Add(statusStrip);
        }

        private void FormMain_MenuStrip_Setup() {
            this.menuStrip.Height = 30;
            this.menuStrip.AutoSize = false;
            this.menuStrip.BackColor = Vars.Colors.ForeGrn;
            this.menuStrip.ForeColor = Vars.Colors.BackGrn;
            this.Controls.Add(menuStrip);
        }

        private void FormMain_KeyDown(object sender, KeyEventArgs e) {
            this.FormMain_Exit();
        }

        private void FormMain_Exit() {
            this.Close();
        }
    }
}

2 ответа

Я нашел этот вопрос 6+ лет, когда гуглил. Я не думаю, что это остается проблемой для ОП. Только для будущих читателей.


Когда вы добавляете экземпляр дизайнером или кодом, вы увидите тонкую горизонтальную линию поверх элемента управления.

Вы можете избавиться от этой строки, явно установив StatusStrip.BackColorсвойство любого цвета. В дизайнере измените цвет на любой и установите его обратно на унаследованный (Формы), и он исчезнет. В качестве альтернативы в коде установите свойство на себя:

      private void FormMain_StatusStrip_Setup()
{
    this.statusStrip.BackColor = this.statusStrip.BackColor;
    //...
}

Дополнительные сведения об этом поведении см. в разделе Winforms ToolStrip.BackColor возвращает неправильный цвет .


В вашем случае, очевидно, BackColorтрюк не имеет никакого эффекта, линия остается такой, как мы видим на вашем изображении. Это может быть результатом обычаяToolStripRendererесли у вас есть один назначен наStatusStrip.Rendererсвойство, которое использует значения по умолчанию и способы рендеринга полос, включая границы.

Рассмотрим этот пример:

      public class FormMain
{
    public FormMain() : base()
    {
        this.BackColor = Color.Black;
        this.statusStrip.Renderer = new MyCustomRenderer();
    }
}

public class MyCustomRenderer : ToolStripProfessionalRenderer
{
    public MyCustomRenderer() : base(new MyColorTable()) { }
}

public class MyColorTable : ProfessionalColorTable
{
    public override Color StatusStripGradientBegin => Color.Black;
    public override Color StatusStripGradientEnd => Color.Black;
    // ...
}

Здесь вам нужно переопределить рендерерOnRenderToolStripBorderспособ предотвратить рисование границы StatusStrip.

      public class MyCustomRenderer : ToolStripProfessionalRenderer
{
    public MyCustomRenderer() : base(new MyColorTable()) { }

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        if (!(e.ToolStrip is StatusStrip)) base.OnRenderToolStripBorder(e);
    }
}

Или, может быть, нарисовать линию цветом по вашему выбору:

      protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
    if (e.ToolStrip is StatusStrip)
        e.Graphics.DrawLine(Pens.Red, 0, 0, e.ToolStrip.Width, 0);
    else
        base.OnRenderToolStripBorder(e);
}

Когда я добавляю Application.EnableVisualStyles();в Main()эта проблемная строка исчезла.

      namespace test {
    class Program {

        [STAThread]

        static void Main() {
            Application.EnableVisualStyles(); // this line added
            Application.Run(new FormMain());
        }
    }
}
Другие вопросы по тегам