У меня есть метка, центрированная по координате X в форме, и я пытаюсь настроить ее местоположение при изменении размера формы. Итак, я обрабатываю событие Resize для обновления свойства Location метки.
private void SecondaryWindow_Resize(object sender, EventArgs e)
{
lblStartPointX = this.Width / 2 - lblSecondary1.Width / 2;
lblStartPointY = lblSecondary1.Location.Y;
lblSecondary1.Location = new Point(lblStartPointX, lblStartPointY);
}
Кажется, я не могу напрямую присвоить какое-то значение свойству lblSecondary1.Location.X (компилятор считает это ошибкой), поэтому я придумал этот код.
Но мне кажется, что это не очень эффективный способ выполнения задачи... Интересно, сколько объектов Point создается, если постоянно изменять размер окна?
Означает ли отсутствие проблем с производительностью мой код в порядке? Действительно ли это хорошая идея — писать код без учета создания избыточных переменных в долгосрочной перспективе?
Есть множество способов. Вместо этого я бы рекомендовал использовать WPF для адаптивного дизайна.
Когда метка является единственным элементом управления, вы можете включить авторазмер, установить привязки со всех сторон, установить TextAlgin в центр и изменить размер метки, чтобы она занимала все пространство.
Другой способ — работать с TableLayoutPanels. Требуется некоторое время, чтобы привыкнуть к нему, но он приближается к сетке WPF.
Спасибо за ответ, но что, если мне нужно сделать это с помощью кода?
Почему ты бы так поступил? Вы можете сделать это по-своему. Если вы хотите добавить метку через Code/Runtime, вы все равно можете установить привязку и так далее. Если вы не знаете, как это сделать, украдите его из файла *.designer.cs вашей формы.
вы можете использовать: 2 варианта 1) перейдите к свойствам метки в этом разделе «Макет» >> «Якорь», затем установите привязку по своему усмотрению. 2) перейдите к свойствам метки в этом меню «Макет» >> «Док», затем установите док по мере необходимости.
Поскольку вы хотите, чтобы ваша метка оставалась в центре координат X при изменении размера формы, переместите ее положение в центр формы при ее загрузке, установив привязку метки на AnchorStyles.Top
:
private void form1_Load(object sender, EventArgs e)
{
label1.Anchor = AnchorStyles.Top;
label1.Location = new Point((this.Width - label1.Width) / 2, label1.Top);
}
Он сохранит свое положение при изменении размера Form.Width
.
Если вы хотите, чтобы он был центрирован в обоих измерениях, отцентрируйте его и удалите все привязки. Элемент управления останется в середине родительской формы:
private void form1_Load(object sender, EventArgs e)
{
label1.Anchor = AnchorStyles.None;
label1.Location = new Point((this.Width - label1.Width) / 2,
(this.Height - label1.Height) / 2);
}
Возможный дубликат Как сохранить метку по центру в WinForms?