我有一些奇怪的绘画文物,我希望有人可以帮助我确定。
基本上我有一个左对接的面板应该有一个无法正常工作的渐变背景。我已经改变了调试的颜色
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();
}
这样做的整体效果是,当我调整大小时,我没有获得漂亮的纯色或漂亮的渐变填充。
答案 0 :(得分:3)
我建议您创建自己的面板,从面板派生它并将以下内容放在构造函数中:
this.SetStyle(ControlStyles.AllPaintingInWmPaint
| ControlStyles.OptimizedDoubleBuffer
| ControlStyles.ResizeRedraw
| ControlStyles.DoubleBuffer
| ControlStyles.UserPaint
, true);
答案 1 :(得分:1)
在New中添加以下内容(在InitializeComponents之后):
this.SetStyle(ControlStyles.ResizeRedraw, true);
这是为了确保在调整大小时进行绘画。
您可以尝试其他几种样式(AllPaintingInWmPaint,UserPaint ...)但是否应该设置它们取决于您的具体情况以及您想要做什么。如果您在Paint事件中完成所有绘画,我会设置它们。