我有一些奇怪的绘画手工艺品,希望有人可以帮我固定下来。

基本上,我有一个左停靠面板,该面板应该具有渐变背景,但无法正常工作。我改变了颜色进行调试

screenshot http://img509.imageshack.us/img509/5650/18740614.png

面板停靠在左侧,并具有透明控件(因此,在正确绘制透明控件的边缘上,您会看到红色的小桩,拾取了背景色)。

但是,当我缓慢调整面板大小时,我在底部留下了红线,我希望它会被黄色填充物遮盖。我使用的代码如下:

// Construction
sidePanel.Paint += new PaintEventHandler(OnPaint);

private void OnPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
   Panel pb = sender as Panel;
   PaintControl(pb.Width, pb.Height, sender, e, true);
}

private static void PaintControl(int width, int height, object sender, PaintEventArgs e, bool sidebar)
{
    Rectangle baseRectangle = new Rectangle(0, 0, width -1, height-1);

    using (LinearGradientBrush gradientBrush = new LinearGradientBrush(baseRectangle, WizardBaseForm.StartColour, WizardBaseForm.EndColour, 90))
    {
        e.Graphics.Clear(Color.Yellow);
        e.Graphics.DrawRectangle(Pens.Red, baseRectangle);
        e.Graphics.FillRectangle(Brushes.Yellow, baseRectangle);
    }
}

protected override void OnResize(EventArgs e)
{
   base.OnResize(e);
   this.Invalidate();
}


这样做的总体效果是,调整大小时,我没有得到很好的纯色或渐变填充。

最佳答案

我建议创建自己的面板,从面板派生它,并将以下内容放置在构造函数中:

  this.SetStyle(ControlStyles.AllPaintingInWmPaint
              | ControlStyles.OptimizedDoubleBuffer
              | ControlStyles.ResizeRedraw
              | ControlStyles.DoubleBuffer
              | ControlStyles.UserPaint
              , true);

08-07 17:40