Переопределение OnPaint никогда не называют

Я был в этом в течение нескольких дней, и это сводит меня с ума. Я имею контроль, который наследовался Системе. Windows. Формы. Панель и я пытаемся переопределить 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);
        }
}
17
задан Ian Ringrose 20 September 2010 в 08:58
поделиться

1 ответ

У меня такая же проблема только с ProgressBar, когда я пытаюсь переопределить OnPaint .. Он никогда не вызывается.


Я нашел решение здесь: http://web.archive.org/web/20140214234801/http://osix.net/modules/article/?id=826

Вы должны создать конструктор и включите рисование пользователем следующим образом:

SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);

Значения по умолчанию, вероятно, зависят от версии фреймворка и ОС.

21
ответ дан 30 November 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: