Как наиболее эффективно настроить случайное расположение метки в соответствии с размером окна? - PullRequest
0 голосов
/ 28 мая 2019

У меня есть метка, центрированная координатой 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 создается, если вы постоянно меняете размер окна?

Ответы [ 3 ]

1 голос
/ 28 мая 2019

Есть несколько способов.Я бы рекомендовал использовать WPF вместо этого для адаптивного дизайна.

Когда Label является единственным элементом управления, вы можете повернуть Autosize, установить якоря со всех сторон, установить TextAlgin на Center и изменить размер Label, так что требуетсявсе пространство.

Другим способом было бы работать с TableLayoutPanels.Требуется некоторое время, чтобы привыкнуть к нему, но он приближается к сетке WPF.

0 голосов
/ 28 мая 2019

Поскольку вы хотите, чтобы ваша метка оставалась центрированной в координатах 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);
}
0 голосов
/ 28 мая 2019

вы можете использовать: 2 варианта 1) Перейдите к свойствам метки в этом разделе Макет >> Привязка, затем установите привязку так, как вы хотите. 2) перейдите к свойствам метки в этом разделе Layout >> Dock, затем установите Dock как требуется.

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