Как убрать этот странный визуальный артефакт в углу элемента управления ToolStrip Winforms? - PullRequest
12 голосов
/ 16 декабря 2011

Вот изображение, которое показывает проблему.Посмотрите на правый нижний угол.

Кто-нибудь знает, как от него избавиться?

Настройка LayoutStyle на VerticalStackWithOverflow исправляет его, но также центрирует элементы по горизонтали, которые я не делаюя не хочу.

Я просто хочу вертикальный стек, как на картинке, но без этой черной линии в правом нижнем углу.

enter image description here

Ответы [ 3 ]

13 голосов
/ 05 июня 2013

Извините за опоздание на вечеринку, но принятый ответ не сработал для моих нужд.Я пришел к следующему решению:

Избавление от черной линии

1) Создайте пользовательский рендер:

class CustomToolStripProfessionalRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        // Don't draw a border
    }
}

2) Используйте пользовательский рендерер:

toolStrip1.Renderer = new CustomToolStripProfessionalRenderer();

Избавление от фона

Приведенное выше решение удовлетворяет потребности исходного вопроса, но мне также не понравился градиентный фон на ToolStrip.Я хотел, чтобы ToolStrip был «невидимым» контейнером:

1) Создайте таблицу пользовательских цветов:

class CustomProfessionalColorTable : ProfessionalColorTable
{
    public override Color ToolStripGradientBegin
    {
        get { return SystemColors.Control; }
    }

    public override Color ToolStripGradientMiddle
    {
        get { return SystemColors.Control; }
    }

    public override Color ToolStripGradientEnd
    {
        get { return SystemColors.Control; }
    }
}

2) Используйте таблицу пользовательских цветов:

class CustomToolStripProfessionalRenderer : ToolStripProfessionalRenderer
{
    public CustomToolStripProfessionalRenderer()
        : base(new CustomProfessionalColorTable())
    {

    }

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        // Don't draw a border
    }
}
12 голосов
/ 16 декабря 2011

На панели свойств установите «RenderMode» на «System» или используйте

.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;

. При этом .BackColor изменится на «Control», но вы можете изменить его после, если хотите.

3 голосов
/ 16 декабря 2011

Я думаю, что вам лучше всего было бы установить RenderMode в System в свойствах и оставить свойства макета равными HorizontalStackWithOverflow.Но это если вы не против изменить стиль рисования всплывающей подсказки.

...