protected override void OnPaint(PaintEventArgs e)
{
// Nothing here...
}
我写了一个继承System.Windows.Forms.Form
的类。我重写了方法OnPaint
并且没有做任何事情,如上所示。当我运行代码时,我希望屏幕上看不到任何内容,但窗口像往常一样出现。
我确保没有画任何东西,但它看起来完全正常。为什么会这样?
答案 0 :(得分:3)
你启用了用户绘画吗? 从构造函数中调用它,看看会发生什么
SetStyle(
ControlStyles.AllPaintingInWmPaint
| ControlStyles.UserPaint
| ControlStyles.OptimizedDoubleBuffer
| ControlStyles.ResizeRedraw, true);
答案 1 :(得分:3)
Form.OnPaint()方法已经完成了 no 绘画。所以你没有做任何改变,你唯一做的就是通过不调用base.OnPaint()来阻止Paint事件被触发。当然不是很有用。
您忘记了绘制的其他方法,即OnPaintBackground()方法。它绘制BackColor属性设置的窗口背景,如果您设置了BackgroundImage属性,则为图像。 OnPaint()和任何Paint事件处理程序都在其上绘制。闪烁的根本原因。
尝试引导您为何这样做:不,这不是实现透明度的正确方法。未上漆的窗口显示随机像素,无论在创建窗口之前是否存在于视频帧缓冲区中。哪个看起来像一样透明,但只是很短的时间。当用户调整大小或移动窗口时搞砸了。 Windows基本上是不透明的。正确的方法是使用TransparencyKey属性,它启用一个组合多个窗口像素的混音器。也是Opacity属性的工作方式。