Изменение размера элементов управления с помощью Form Resize

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

в visual basic это было довольно легко сделать с формой.Свойство Zoom (которое, конечно, не требовало изменения размера элементов управления, но решило то, что мне нужно). К сожалению, это недоступно в C# приложения 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();
*/
}

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

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

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

5 ответов


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

С помощью TableLayoutPanel, У вас есть полный контроль над тем, как cotrols должны быть организованы. Для строк и столбцов можно задать абсолютный или процентный размер.


использовать якорь контроля. Есть возможность закрепления сверху, снизу, слева и справа. И ты можешь идти.


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

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

все они также легко устанавливаются на панели свойств при использовании конструктора.

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

textBox1.Location = new Point(newX, newY);

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

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

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


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