C #Invalidate не вызывает метод рисования

У меня переопределен метод OnPaint для рисования эллипса на экране.

    protected override void OnPaint(PaintEventArgs e)
    {
        MessageBox.Show("Paint");
        if (debugStarted)
        {
            int y = rtbLogicCode.PlaceToPoint(new Place(0, debugLine)).Y;
            if (rtbLogicCode.GetVisibleState(debugLine).ToString() == "Visible")
            {
                e.Graphics.FillEllipse(new LinearGradientBrush(new Rectangle(0, y, 15, 15), Color.LightPink, Color.Red, 45), 0, y, 15, 15);
            }
            base.OnPaint(e);
        }
    }

    private void rtbLogicCode_Scroll(object sender, ScrollEventArgs e)
    {
        this.Invalidate();
    }

Событие прокрутки (в поле Richtextbox )обрабатывается правильно, но даже несмотря на то, что я аннулирую форму, оно не вызывает функцию OnPaint (Окно сообщений не отображается ).

Что может быть возможной причиной этого?

Изменить :Я забыл упомянуть, что в моей функции инициализации дочерней формы (, добавленной в качестве элемента управления основной формы с использованием свойства MDI ),Я установил следующие стили:

 private void LogicCodeInit()
    {


            this.SetStyle(ControlStyles.DoubleBuffer, true);
            this.SetStyle(ControlStyles.ResizeRedraw, true);
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.UserPaint, true);


    }

Edit2 :Я также забыл упомянуть, что дочерняя форма добавляется как элемент управления TabControl. Затем TabControl добавляется в качестве элемента управления основной формы.

6
задан l46kok 9 July 2012 в 06:50
поделиться