Изменение размера элементов управления с изменением формы

Вопрос:Я прочитал несколько вопросов, не найдя подходящего рабочего решения для моей проблемы. Как изменить размеры элементов управления при изменении размера формы? Я бы хотел, чтобы они стали больше или меньше, когда форма становится больше или меньше. В визуальном базисе это было довольно легко сделать с свойством form.Zoom(который действительно не требовал изменения размера, конечно, но решил,

Вопрос:

Я прочитал несколько вопросов, не найдя подходящего рабочего решения для моей проблемы. Как изменить размеры элементов управления при изменении размера формы? Я бы хотел, чтобы они стали больше или меньше, когда форма становится больше или меньше.

В визуальном базисе это было довольно легко сделать с свойством form.Zoom(который действительно не требовал изменения размера, конечно, но решил, что мне нужно). К сожалению, это не доступно в winforms С#.

Вот некоторые другие вещи, которые я пробовал без везения:

private void formMain_Resize(object sender, EventArgs e) {/* double scale; this.scaleWidth = (float)this.Width / (float)this.origWidth; this.scaleHeight = (float)this.Height / (float)this.origHeight; if (this.scaleHeight > this.scaleWidth) { scale = this.scaleHeight; } else { scale = this.scaleWidth; } foreach (Control control in this.Controls) { control.Height = (int)(control.Height * this.scaleHeight); control.Width = (int)(control.Width * this.scaleWidth); this.Refresh(); // control.Font = new Font(«Verdana», control.Font.SizeInPoints * heightRatio * widthRatio); } ///////This scaling didnt work for me either //this.Scale(new SizeF(this.scaleWidth, this.scaleHeight)); //this.Refresh(); */ }

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

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

Кроме того, я попытался использовать некоторые из инструментов привязки/стыковки, думая, что они автоматически разрешат это, но это не так.

Лучший ответ:

Я нашел альтернативное решение, которое хорошо работает для меня, оценивает любые отрицательные или положительные комментарии к решению.

Используя несколько контейнеров Split и Split Containers внутри Split Containers в разных регионах, я могу отделить основные части макета, и в этом случае использование стыковки и привязки я могу выполнить именно то, что я хотел сделать – это прекрасно работает.

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

Ответ №1

Лучшим вариантом является использование TableLayoutPanel. Поместите TableLayoutPanel в форму, установите для свойства Dock значение Fill, создайте требуемые строки и столбцы и поместите элементы управления внутри ячеек. Конечно, вам нужно установить Dock/Anchor на элементы управления внутри ячеек, чтобы они реагировали на изменения размера ячейки. В некоторых ситуациях вам может потребоваться поместить a Panel в ячейку и удалить элементы управления внутри нее, поскольку каждая ячейка может содержать только один элемент управления. Вам также может потребоваться установить RowSpan/ColumnSpan на элементах управления.

Используя TableLayoutPanel, вы полностью контролируете, как должны быть организованы ваши котроли. Вы можете установить абсолютный или процентный размер для строк и столбцов.

Ответ №2

Используйте Anchor элемента управления. Там есть возможность привязки верхнего, нижнего, левого и правого. И тебе хорошо идти.

Ответ №3

То, что вы пытаетесь сделать в своем коде, – это изменить размеры элементов управления, которые не так хороши. Как правило, размер кнопок и текстовых полей не должен изменяться при изменении размера формы, но их часто нужно перемещать (менять местоположение). Некоторым элементам управления необходимо изменить размер в соответствии с формой переразмера, но в большинстве случаев это только одно измерение. Центральные элементы управления, которые используются для рабочей области (если вы разрабатываете инструмент для рисования, например), должны изменять размеры обоих размеров. Все это можно выполнить, правильно настроив свойства Dock и/или Anchor элементов управления.

textBox1.Dock = DockStyle.Bottom; textBox1.Anchor = AnchorStyles.Bottom & AnchorStyles.Left;

Все это также легко устанавливается на панели “Свойства” при использовании конструктора.

Но если этого недостаточно для вас, в редких случаях вам определенно захочется только изменить расположение элемента управления:

textBox1.Location = new Point(newX, newY); Ответ №4

Если элементы управления находятся в групповом поле, не забудьте изменить свойства групповых полей. Управление внутри коробки контролируется коробкой. Размер окна (если он не находится внутри другого блока) управляется формой.

Оцените статью
Добавить комментарий