日期:2014-05-18  浏览次数:20971 次

◆如何清除Panel已绘制的渐变背景色,好像没有问过的问题◆
panel上有部分透明的背景图,绘制一个背景颜色渐变,圆角的形状,实现鼠标经过就显示颜色渐变圆角,鼠标离开就恢复原状(只有背景图,没有渐变颜色圆角)
如下的NowPaint1是实现绘制一个背景颜色渐变,圆角的形状,鼠标经过时执行NowPaint1能显示我要的效果
如下的NowPaint2是想实现鼠标离开恢复原状,但没有成功,请高手帮忙

 
C# code
private void NowPaint1()
  {
    Rectangle rec = new Rectangle(0, 0, panel1.Width, panel1.Height);
    GraphicsPath round = CreateRound(rec, 10 * 2);
    Graphics gp = panel1.CreateGraphics();
    Brush b = new LinearGradientBrush(rec, Color.Blue, Color.Red, LinearGradientMode.Vertical); 
    gp.FillPath(b, round);
    Image im = panel1.BackgroundImage; if (im != null) gp.DrawImage(im, new Point(0, 0));
  }

  private void NowPaint2()
  {
   //在这里如何清空已经绘制的图
    panel1.BackColor = Color.Transparent;
  }


  private GraphicsPath CreateRound(Rectangle rect, int radius) //画圆角
  {
    GraphicsPath roundRect = new GraphicsPath();
    roundRect.AddArc(rect.Right - radius, rect.Top, radius, radius, 270, 90);//右上角

    roundRect.AddArc(rect.Right - 1 - radius, rect.Bottom - 1 - radius, radius, radius, 0, 90);//右下角

    roundRect.AddArc(rect.Left - 1, rect.Bottom - 1 - radius, radius, radius, 90, 90);//左下角

    roundRect.AddArc(rect.Left, rect.Top, radius, radius, 180, 90);//左上角

    return roundRect;
  }


------解决方案--------------------
有一个变通的解决方法,再画一个和panle背景色一样的填充。。。。
------解决方案--------------------
panel1.Invalidagte()
------解决方案--------------------
探讨

panel1.Invalidagte()

------解决方案--------------------
代码写错地方了。
Graphics gp = panel1.CreateGraphics();

绘制的代码应该写在onpaint这个事件或方法里。
graphics g=e.g.
------解决方案--------------------
楼主的方法行不通 图片会把渐变的背景挡住