Групповая коробка с панелью разметки внутри и autosize = true сжимается как пустая - PullRequest
11 голосов
/ 27 июля 2010

У меня есть групповое окно, которое содержит панель разметки, а панель разметки содержит кучу элементов управления. Я установил панель потока для стыковки с родителем. Поскольку я не знаю, сколько элементов управления будет на панели, я установил для автоматического изменения размера группового поля значение true, а для автоматического изменения размера - увеличение и уменьшение. Когда я делаю это, групповое окно сжимается, как будто оно пустое. Мне нужна подпись, поэтому я не могу удалить групповую коробку. Кто-нибудь знает, почему это происходит?

Ответы [ 4 ]

6 голосов
/ 27 июля 2010

Ничто не мешает FlowLayoutPanel сжиматься до нуля.Вам по крайней мере придется также установить для его свойства AutoSize значение True.

5 голосов
/ 29 января 2013

Я пытался сделать то же самое сегодня.Ниже приведено решение, которое я придумала: прикрепить FlowLayoutPanel внутри GroupBox, а затем использовать события Resize и ControlAdded FlowLayoutPanel, чтобы инициировать изменение размера родительского GroupBox.

Обработчик изменения размера находит нижнюю частьпоследний элемент управления в FlowLayoutPanel и изменяет размер GroupBox с достаточным пространством для размещения самых нижних элементов управления в FlowLayoutPanel.

Я попытался использовать AutoSize = true для FlowLayoutPanel и GroupPanel.Но, к сожалению, это позволяет FlowLayoutPanel расти горизонтально.

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();

        int numGroupBoxes = 4;

        for (int groupBoxIndex=0; groupBoxIndex<numGroupBoxes; groupBoxIndex++ )
        {
            GroupBox groupBox = new GroupBox();
            groupBox.Text = "Group " + groupBoxIndex;
            groupBox.Size = new Size(this.Width, 0);
            groupBox.Dock = DockStyle.Top;
            this.Controls.Add(groupBox);

            FlowLayoutPanel groupBoxFlowLayout = new FlowLayoutPanel();
            groupBoxFlowLayout.Dock = DockStyle.Fill;
            groupBox.Controls.Add(groupBoxFlowLayout);

            int extraSpace = 25; // the difference in height between the groupbox and the contents inside of it

            MethodInvoker resizeGroupBox = (() =>
            {
                int numControls = groupBoxFlowLayout.Controls.Count;
                if ( numControls > 0 )
                {
                    Control lastControl = groupBoxFlowLayout.Controls[numControls - 1];
                    int bottom = lastControl.Bounds.Bottom;
                    groupBox.Size = new Size(groupBox.Width, bottom + extraSpace);
                    groupBoxFlowLayout.Size = new Size(groupBoxFlowLayout.Width, bottom);
                }
            });

            groupBoxFlowLayout.Resize += ((s, e) => resizeGroupBox());
            groupBoxFlowLayout.ControlAdded += ((s, e) => resizeGroupBox());

            // Populate each flow panel with a different number of buttons
            int numButtonsInGroupBox = 3 * (groupBoxIndex+1);
            for (int buttonIndex = 0; buttonIndex < numButtonsInGroupBox; buttonIndex++)
            {
                Button button = new Button();
                button.Margin = new Padding(0, 0, 0, 0);
                string buttonText = buttonIndex.ToString();
                button.Text = buttonText;
                button.Size = new Size(0,0);
                button.AutoSize = true;
                groupBoxFlowLayout.Controls.Add(button);
            }

        }


    }

}

Вот три снимка экрана элемента управления, размер которого изменяется на разную ширину:

Three screenshats of the control resized to various different widths

0 голосов
/ 28 июня 2012

Вы устанавливаете свойства Anchor: Top, Bottom, Left, Right для groupBox.

0 голосов
/ 27 июля 2010

Вы заявляете: «Я не знаю, сколько элементов управления будет на панели». Есть ли у вас элементы управления в FlowLayoutPanel во время разработки? Если вы этого не сделаете, это звучит как ожидаемое поведение. У Panel ничего нет, поэтому ее желаемый размер равен нулю, поэтому желаемый размер GroupBox равен нулю.

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

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