Winforms нарисованные владельцем управления и изменения размера

Я разрабатываю элемент управления (ниже) под названием ViewPanel, По сути это просто панель, которая рисует это Text собственность как заголовок. Для этого я настраиваю DisplayRectangle свойство, чтобы оставить достаточно места в верхней части, чтобы нарисовать текст.

Проблема, с которой я сталкиваюсь (и с которой сталкивались многие владельцы средств управления, которые манипулируют DisplayRectangle) заключается в том, что при изменении размера элемента управления его дочерние элементы управления немного отстают.

Пример:

Пример контроля

Как вы можете видеть здесь, у меня есть ViewPanel контроль, который нарисовал синий заголовок, также обратите внимание, что ViewPanel дополняется 16px в каждом направлении!

ViewPanel контроль имеет одного ребенка (ListView)

Я изменил размер элемента управления - обратите внимание, как ViewPanel правильно нарисовал свой заголовок, но ребенок не изменился.

Вопрос:

Что отвечает за обновление местоположения дочерних элементов управления? Нужно ли что-то переопределить?

1 ответ

Решение

Решено (для любого другого элемента управления рисования владельца):

protected override void WndProc(ref Message m)
{
    const int WM_WINDOWPOSCHANGED = 0x0047;
    base.WndProc(ref m);
    if (m.Msg == WM_WINDOWPOSCHANGED)
    {
        //Make changes to your display rectangle here...
        this.PerformLayout();
    }
}
Другие вопросы по тегам