Сборка и перестройка вашего приложения без изменений, как правило, не решает эту проблему (или большинство других ошибок), за исключением тех, в которых вы запускаете приложение, без предварительной очистки / перестройки, а затем уведомления что код, который вы только что написали, не работает (не уверен, что это возможно в наши дни с IDE). Я часто вижу это с новыми разработчиками, когда они продолжают перестраивать, надеясь, что компилятор сделает код «правильным» или что компилятор просто не генерирует правильный код для начала. (Обратите внимание, что я не имею в виду вышеупомянутые заявления, которые следует принимать пренебрежительно.)
Чтобы решить данную проблему, вы можете попробовать создать собственный класс TableLayoutPanel, в котором вы переопределяете событие OnBackgroundPaint, рисуете свой собственный фон или просто возвращаете его, если не хотите рисовать свой собственный фон. (Кажется, вы рисуете фон в событии Paint ). В приведенном выше коде вы просто закрашиваете фон, уже закрашенный элементом управления, отсюда и «ошибка» (двойная закраска). Похоже, что форма не изменяемого размера. Попробуйте сделать его изменяемого размера. Затем измените его размер и наблюдайте за его окраской, или просто переместите другие окна поверх него.
class CustomTableLayoutPanel : TableLayoutPanel
{
protected override void OnPaintBackground(PaintEventArgs e)
{
Brush brush = new LinearGradientBrush(this.ClientRectangle, TaskHeaderLeftColor, TaskHeaderRightColor, LinearGradientMode.Horizontal);
e.Graphics.FillRectangle(brush, this.ClientRectangle);
//base.OnPaintBackground(e);
}
}