установка DockStyle.Fill для динамических элементов управления не изменяет размер, когда я перемещаю разделитель

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

        Label labelInput = new Label();

        TextBox listBoxNewInput = new TextBox();


        listBoxNewInput.Name = ce.ToString();

        labelInput.AutoSize = true;
        labelInput.Font = new Font(labelInput.Font, FontStyle.Bold);



        listBoxNewInput.Multiline = true;
        // Add vertical scroll bars to the TextBox control.
        listBoxNewInput.ScrollBars = ScrollBars.Vertical;
        // Allow the RETURN key in the TextBox control.
        listBoxNewInput.AcceptsReturn = true;
        // Allow the TAB key to be entered in the TextBox control.
        listBoxNewInput.AcceptsTab = true;
        // Set WordWrap to true to allow text to wrap to the next line.
        listBoxNewInput.WordWrap = true;
        listBoxNewInput.Text = ts.ToString();
        //listBoxNewInput.Width = 150;
        listBoxNewInput.MinimumSize = new Size(200,150);
        listBoxNewInput.MaximumSize = new Size(1000, 150);

        listBoxNewInput.Dock = DockStyle.Fill;

        listBoxNewInput.TextChanged += new EventHandler(listBoxNewInput_TextChanged);
        //Add the newly created text box to the list of input text boxes
        inputTextBoxesList.Add(listBoxNewInput);

        //Add the labels and text box to the form

        flowLayoutPanel1.Controls.Add(labelInput);
        flowLayoutPanel1.Controls.Add(listBoxNewInput);

если я пытаюсь поместить элементы управления непосредственно на панель разделителя 1, появляются только первые два элемента управления, размер которых изменяется при перемещении разделителя

splitContainer1.Panel1.Controls.Add(labelInput); splitContainer1.Panel1.Controls.Add(listBoxNewInput);

-> если элементы управления, когда я помещаю их в элемент управления потоком, изменяют размер, когда я перемещаю разделитель, это было бы хорошо ИЛИ -> Все элементы управления появляются, когда я помещаю их непосредственно в панель разделителя 1


person PUG    schedule 13.10.2011    source источник
comment
В чем смысл FlowLayoutPanel, если элементы управления внутри него DockFilled? Какой смысл в MaximumSize, если вы хотите DockFill?   -  person LarsTech    schedule 13.10.2011
comment
Я не уверен, но думаю, что flowlayoutpanel не ведет себя как другие с точки зрения Dock.Fill. Взгляните на msdn.microsoft.com/en-us/library/ms171633. aspx ... вы также можете один раз принять во внимание tablelayoutpanel. Это также может решить вашу проблему, но на самом деле гарантия остается на ваших требованиях.   -  person Sandy    schedule 13.10.2011
comment
если я попытаюсь поместить элементы управления непосредственно на панель разделителя 1, появятся только два элемента управления:   -  person PUG    schedule 13.10.2011
comment
splitContainer1.Panel1.Controls.Add (labelInput); splitContainer1.Panel1.Controls.Add (listBoxNewInput);   -  person PUG    schedule 13.10.2011
comment
@LarsTech точка максимального размера при заполнении стыковки должна увеличиваться только по ширине, в то время как высота остается постоянной.   -  person PUG    schedule 14.10.2011


Ответы (1)


Основываясь на ваших комментариях и на том, что, я думаю, вы пытаетесь достичь, я думаю, вам нужно заменить FlowLayoutPanel на TableLayoutPanel, потому что похоже, что вы просто складываете один TextBox под другим.

Создайте TableLayoutPanel с 1 столбцом и 1 строкой.

Вот рабочий пример:

tableLayoutPanel1.AutoScroll = true;
tableLayoutPanel1.GrowStyle = TableLayoutPanelGrowStyle.AddRows;
tableLayoutPanel1.RowStyles.Clear();
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 150));
for (int i = 0; i < 4; i++) {
  AddTextBox("TextBox #" + i.ToString());
}

private void AddTextBox(string info) {
  TextBox tx = new TextBox();
  tx.Multiline = true;
  tx.Text = info;
  tx.ScrollBars = ScrollBars.Vertical;
  tx.WordWrap = true;
  tx.Height = 150;
  tx.Anchor  = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
  tableLayoutPanel1.Controls.Add(tx);
}

Вместо стыковки я устанавливаю высоту TextBox, а затем устанавливаю Anchors, чтобы при изменении размера SplitPanel размер TextBox изменялся соответствующим образом.

person LarsTech    schedule 14.10.2011
comment
уберите эту строку, и код заработает: tableLayoutPanel1.RowStyles.Add (new RowStyle (SizeType.Absolute, 150)); эта строка вызывает ненужное пространство для первых 2 элементов управления. - person PUG; 14.10.2011
comment
@jaminator Да, элементы управления TableLayoutPanel и FlowLayoutPanel - не самое интересное занятие. - person LarsTech; 14.10.2011
comment
поместите лишнюю фиктивную строку в конец, чтобы не допустить, чтобы tablelayout создавал ненужное пространство перед последней строкой - person PUG; 18.11.2011