我有一些奇怪的绘画手工艺品,希望有人可以帮我固定下来。
基本上,我有一个左停靠面板,该面板应该具有渐变背景,但无法正常工作。我改变了颜色进行调试
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);