Когда я изменяю размер метки из кода, мусор кратко отображается на новом пустом месте - PullRequest
0 голосов
/ 21 февраля 2011

Я изменяю размеры и перемещаю элементы управления.

Код работает так, как я хочу, за исключением того, что я получаю черный прямоугольник, отображаемый на короткое время в новом пространстве до появления правильного отображения.

Перемещение элемента управления выполняется, когда другой элемент управления изменяет его высоту.

Я делаю изменения из OnPaint в классе, производном от Label, и, кажется, не имеет значения, если я вызываюпервый или последний базовый OnPaint.

public ref class ResizeLabel : public System::Windows::Forms::Label
{
    private void resizelabel()
    {
        int width = ... ;
        int height = ... ;
        __super::Width = width;
        __super::Height = height;
        this->LinkedControl->Top = __super::Top + __super::Height;
    }

    protected: virtual void OnPaint(System::Windows::Forms::PaintEventArgs^  e) override {
       resizeLabel();
       __super::OnPaint(e);
    }
};

Возможно, я делаю что-то не так, но не знаю, что.

Кто-нибудь может помочь?

1 Ответ

2 голосов
/ 22 февраля 2011

Я, вероятно, что-то делаю не так, но я не знаю, что.

Одна логически неправильная вещь, которую вы делаете, это изменение размера внутри события рисования. Это не имеет никакого логического смысла. Внутри события рисования часть перерисовываемого элемента управления уже определена (и действительно указывается в аргументах события). Изменение размера не меняет этого. Он просто помечает другие части элемента управления как недействительные (если размер увеличивается), и, следовательно, из-за новых событий рисования в будущем.

Изменение размера внутри события или метода, которое фактически вызывает изменение размера, независимо от того, что это может быть, а не внутри события, которое вызывает рисование элемента управления. Если изменение размера должно происходить, например, при изменении текста метки, поместите код изменения размера в метод, который вызывается изменением текста. «Мой текст изменился, мне нужно разработать новый размер для себя, новые неокрашенные части меня, которые создаются, чтобы перекрашиваться на досуге обычным способом». это логика для такого контроля. То же самое касается других причин изменения размера.

...