Как отключить линию под инструментальной полосой в winform c #? - PullRequest
13 голосов
/ 17 декабря 2009

alt text

эта строка?

Ответы [ 2 ]

46 голосов
/ 14 января 2010

Это ошибка в «системном» рендере, подробности в этом отчете об ошибках .

Ответ Microsoft дает очень простой обходной путь:

1) Создайте подкласс ToolStripSystemRenderer, переопределив OnRenderToolStripBorder и сделав его недоступным:

public class MySR : ToolStripSystemRenderer
{
    public MySR() { }

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        //base.OnRenderToolStripBorder(e);
    }
}

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

toolStrip3.Renderer = new MySR();
9 голосов
/ 03 июля 2013

Возможно, вы захотите добавить проверку типа, чтобы избежать пропуска границы ToolStripDropDownMenu / etc. (поскольку он унаследован от ToolStrip, он автоматически начинает использовать тот же пользовательский рендер):

protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
    if (e.ToolStrip.GetType() == typeof(ToolStrip))
    { 
        // skip render border
    }
    else
    {
        // do render border
        base.OnRenderToolStripBorder(e);
    }
}

Пропущенная ToolStripDropDownMenu граница не так заметна при использовании ToolStripSystemRenderer, но становится настоящим бельмом на глазу с ToolStripProfessionalRenderer.

Кроме того, установка System.Windows.Forms.ToolStripManager.Renderer = new MySR(); может быть полезна, если вы хотите, чтобы все ToolStrip экземпляры приложения в целом использовали MySR по умолчанию.

...