Как отключить строку под полосой инструментов в winform c#?

2 ответов


это ошибка в" системном " рендерере, подробности в этот отчет об ошибке.

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

1) Создайте подкласс ToolStripSystemRenderer переопределение OnRenderToolStripBorder и делает его no-op:

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

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

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

toolStrip3.Renderer = new MySR();

вы можете добавить проверку типа, чтобы избежать пропущенной границы на 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 экземпляры appwide для использования MySR по умолчанию.