我已经待了几天,这让我发疯。我有一个继承自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);
        }
}

最佳答案

当我尝试覆盖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);

默认值可能会因框架版本和OS而异。

10-07 23:10