我已经在这几天了,这让我很生气.我有一个继承自System.Windows.Forms.Panel的控件,我试图覆盖OnPaint.它很简单,直截了当地发出它.
public class CollapsiblePanel : System.Windows.Forms.Panel
{
public CollapsiblePanel()
{
//
// Required for the Windows Form Designer
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
SetStyle
(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint | ControlStyles.DoubleBuffer |
ControlStyles.ResizeRedraw | ControlStyles.Selectable ,
true
);
}
protected override void OnPaint(PaintEventArgs e)
{
// This never runs no matter what I try!
base.OnPaint(e);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 21
当我尝试覆盖OnPaint时,我对ProgressBar也有同样的问题.它从未被调用过.
我在这里找到了解决方案:http://web.archive.org/web/20140214234801/http : //osix.net/modules/article/?id = 826
您必须创建一个构造函数并启用用户绘制,如下所示:
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
Run Code Online (Sandbox Code Playgroud)
默认值可能因框架版本和操作系统而异.