Переопределение OnPaint никогда не вызывается - PullRequest
16 голосов
/ 07 февраля 2010

Я занимаюсь этим несколько дней, и это сводит меня с ума. У меня есть элемент управления, который наследуется от 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);
        }
}

Ответы [ 3 ]

20 голосов
/ 24 февраля 2010

У меня такая же проблема только с 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);

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

1 голос
/ 12 августа 2016

Звоните this.Invalidate(), когда хотите позвонить OnPaint

0 голосов
/ 06 июня 2013

У меня была проблема: не видел , что он иногда запускался. Но это работает ПРЯМО в Windows 7 x64, .NET Framework 4.0. Просто добавил его в форму.

class Class1 : Panel
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        Console.WriteLine("hello world, I'm painting myself");
        // Process.Start("notepad.exe");
    }
}

Если вы не видите вывод консоли, попробуйте строку Process.Start(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...