如何在OnPaint调用中重置绘制区域

时间:2012-01-20 20:53:46

标签: c# winforms button

我尝试创建一个半透明的用户控制按钮,其背景不透明度在mouseEnter上从30%黑色变为70%黑色。我可以成功地将按钮涂成30%的黑色,但我不能从70%到30%。就像每次调用OnPaint()一样,它会描绘已经存在的东西,而不是从头开始。我使用子类Panel作为用户控件的背景。

这是我对子类Panel的OnPaint方法:

        Graphics g = e.Graphics;

        Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
        Brush brush = new SolidBrush(Color.FromArgb(Alpha, Color.Black)); // alpha is set by me

        g.FillRectangle(brush, rect);

        g.Dispose();

我和g.Clear()和g.Restore()玩过但是没有运气。有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我不确定Windows在这种情况下如何处理透明度。您应该尝试使窗口窗口上的矩形无效,如果该窗口重新绘制,背景可能看起来就像您想要的那样。

答案 1 :(得分:0)

我最终通过为背景图像交换30%不透明黑色和70%不透明黑色资源来解决这个问题。我还将按钮的BackColor设置为Color.Transparent。