ответ
Это ошибка в «системном» рендерере, подробности в this bug report.
ответ Microsoft дает очень простой обходной путь:
1) Создайте подкласс ToolStripSystemRenderer
, перекрывая OnRenderToolStripBorder
и не делает его нет-оп:
public class MySR : ToolStripSystemRenderer
{
public MySR() { }
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
//base.OnRenderToolStripBorder(e);
}
}
2) Используйте этот визуализатор для ToolStrip:
toolStrip3.Renderer = new MySR();
+1, но я отредактировал ответ, чтобы на самом деле * включить * ответ, а не только указывать на него. StackOverflow должен стоять отдельно, внешние ссылки могут гнить. Они делают хорошее дополнение, но основное содержание должно быть на самом SO. –
Почему это закрывает мое приложение? – RickInWestPalmBeach
Вы можете добавить проверку типа, чтобы не пропустить границу ToolStripDropDownMenu
/и т.д.. (Так как в наследстве от 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
по умолчанию.
Как вы получили белый фон? Это не стандарт. –