渐变绘图Bug

时间:2010-06-04 01:30:38

标签: c# .net winforms

我在使用渐变绘图调用时遇到问题。我有一个看起来像这样的表格。

Screenshot http://img413.imageshack.us/img413/3570/30364682.png

问题是一次又一次上述渐变绘图错误将开始发生。它当然应该是正确的。有时它只需要一些构建 - 重建 - 混搭来修复,它只是在构建后不时地“开始”。

该控件(顶部白色部分)是TableLayoutPanelBackColor设置为白色,在面板的Paint事件中我执行此操作:

/// <summary>
/// Draws the background gradient.
/// </summary>
private void titleBarLayoutPanel_Paint(object sender, PaintEventArgs e)
{
    Brush brush = new LinearGradientBrush(titleBarLayoutPanel.Bounds, TaskHeaderLeftColor, TaskHeaderRightColor, LinearGradientMode.Horizontal);
    e.Graphics.FillRectangle(brush, titleBarLayoutPanel.Bounds);
}

我应该做别的事吗?问题是它有效,然后没有重建或构建,这将开始发生!

编辑我已经重建了它所包含的类库(它是一个通用的Form),然后重建了它所使用的应用程序,渐变现在已经完全填满了。这很奇怪。

2 个答案:

答案 0 :(得分:1)

构建和重新构建应用程序,没有任何更改,通常无法解决此问题(或大多数其他任何错误)保存您运行应用程序的应用程序,而不先进行清理/重建然后通知你刚写的代码没有运行(不确定这些天可能与IDE有关)。当我们继续重建时,我会看到很多新的开发人员,希望编译器能以某种方式使代码“正确”,或者编译器可能根本就没有生成正确的代码。 (请注意,我并不是说上述陈述是贬低的。)

要解决手头的问题,您可以尝试派生自己的TableLayoutPanel类,在该类中覆盖OnBackgroundPaint事件,绘制自己的背景,或者只是在您不想绘制自己的背景时返回。 (您似乎在 Paint 事件中绘制背景)。你在上面的代码中所做的只是在已经由控件绘制的背景上绘画,因此你看到的是“bug”(双涂)。看来该表单不可调整大小。尝试使其可调整大小。然后调整它的大小并观察它的颜色,或者只是将其他窗口移到它上面。

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);
    }
}

答案 1 :(得分:0)

顺便说一句,您应该将Bounds替换为ClientRectangle Bounds是控件相对于其父项的矩形; ClientRectangle与控件本身有关 在这种特殊情况下,它不会产生任何影响,因为控件是0,0。