Изменение размера встроенных пользовательских элементов управления в панели C # - PullRequest
4 голосов
/ 30 мая 2011

Используя WinForms в C #, я пытаюсь получить встроенный пользовательский элемент управления для правильного изменения размера. Я могу добавить его на панель без проблем, и размер панели изменится так, как я ожидаю (и хочу).

Чтобы добавить UserControl, я делаю следующее:

content.Controls.RemoveAt(0);
content.Controls.Add(c);
content.Controls[0].Dock = DockStyle.Fill;
content.Refresh();

Я не могу понять, как заставить вновь добавленный элемент управления правильно изменять размер, я также пытался использовать Anchor с Top, Bottom, Left, Right, но безрезультатно. Любая помощь будет оценена, спасибо.

Ответы [ 3 ]

2 голосов
/ 30 мая 2011

Добавление ниже приведет к изменению размера пользовательского элемента управления с размером родительского элемента управления.

this.Dock = DockStyle.Fill; 

Но, если вы хотите изменить размер дочерних элементов управления вашего пользовательского элемента управления, вам нужно будет правильно установить их значения док-станции и значения привязки. В противном случае основной пользовательский элемент управления изменится, но внутренние дочерние элементы управления пользовательского элемента останутся такими, как есть.

Вы сказали;

<< элемент управления перемещается вниз вместо изменения размера вниз </em>

Если есть некоторые дочерние элементы управления, которые вы хотите растянуть по вертикали, вы можете попробовать панель FlowLayout .

2 голосов
/ 30 мая 2011

Вы на 100% уверены, что Controls [0] фактически ссылается на ваш элемент управления после добавления?

Ваш локальный var для элемента управления все еще действителен, вы можете проверить, правильно ли вы устанавливаете док-станцию ​​с помощью c.Dock = DockStyle.Fill;

1 голос
/ 25 августа 2011

Я понял это.
На панели, которая является основой для всех добавленных панелей, добавьте обработчик для события Resize.
В OnResize() добавьте:

    private void SummaryData_Resize(object sender, EventArgs e)
    {
        foreach (MyPanel pan in this.Controls)
        {
            pan.Dock = DockStyle.Fill;
        }
    }

Это сработало для меня.
Я отладил код, и кажется, что на OnResize все мои panels потеряли свои настройки Dock.

...