У меня есть проблема с ToolStripStatusLabel
, которая возникает, когда BorderSides
установлен в All
и я установить цвет фона другого к владеющему Цвет StatusStrip
ФОН: ToolStripStatusLabels BackgroundColor кровоточит за пределами границы - который выглядит довольно уродливые. Я попытался установить свойство BorderStyle
в другие настройки, кроме Flat без успеха.Howto исправить BackgroundColor кровотечение в граничила ToolStripStatusLabel
На скриншоте, приведенном ниже, вы видите проблему - пример в teal равен BorderStyle = Adjust
, чтобы получить границу, нарисованную за пределами прямоугольника. Но, к сожалению, граница полностью исчезает.
То, что я хотел бы получить не кровотечение вообще, как в этой рисованной примере.
Возможно ли это сделать с помощью установки или наследованием или переопределение конкретный метод ToolStripStatusLabel
? Я открыт для программных решений, но я не знаю, с чего начать, поэтому любые намеки приветствуются.
Реализовано решение путем объединения x4rf41 и TaW сек ответов ниже
Поскольку я использовал нескольких ответов, которые привели меня на правильном пути, я добавил окончательное решение вопроса.
Я пропустил класс ToolStripStatusLabel
и переопределил метод OnPaint
. Это дало мне возможность использовать свойства классов и нарисовать его так, как оно будет нарисовать себя нормально, но без кровотечения.
public partial class ToolStripStatusLabelWithoutColorBleeding : ToolStripStatusLabel
{
/// <summary>
/// Bugfix to prevent bleeding of background colors outside the borders.
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
Rectangle borderRectangle = new Rectangle(0, 0, Width - 1, Height - 1);
// Background
e.Graphics.FillRectangle(new SolidBrush(BackColor), borderRectangle);
// Border (if required)
if (BorderSides != ToolStripStatusLabelBorderSides.None)
ControlPaint.DrawBorder3D(e.Graphics, borderRectangle, BorderStyle, (Border3DSide)BorderSides);
// Draw Text if you need it
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), 0,0);
}
}
Я решил расширить класс и переопределить метод OnPaint, как предлагается, используя ControlPaint.DrawBorder3D, потому что он сохраняет тот же цвет, что и при отсутствии переопределения. Я добавил это к OP и принял ваш ответ, потому что это привело меня к правильному пути. – Marwie
Просто хотел сообщить вам, что я исправил часть вашего решения, больше не полагаясь на e.ClipRectangle - поскольку размер ClipRectangle не всегда является размером клиентской области (например, если вы перемещаете окно за пределы экрана). Теперь я использую фактическую ширину и высоту элемента управления, и он работает отлично. Не могли бы вы также изменить свой ответ, чтобы исправить это? – Marwie