Центрировать (идеально) динамически созданные кнопки на форме? - PullRequest
3 голосов
/ 31 июля 2011

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

В настоящее время я разрабатываю простое приложение меню, которое имеет массив элементов управления (использующий обходные пути для массивов элементов управления, предложенных MSDN), и мне трудно изменить размер формы и центрировать кнопки. Эти кнопки создаются во время компиляции (с параметрами из файла INI), и мой текущий алгоритм центрирования, кажется, немного устанавливает их вправо. Я использую метод "button.location = new Point (..., ...)", но, прочитав об этом, он говорит, что значения располагают кнопки в левом верхнем углу, а не в центре, что объясняет небольшое смещение вправо .

У меня два вопроса:

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

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

Вот что у меня в загрузке:

 MyControlArray(i).Location = New Point(CInt(((Width - ButtonWidth) / 2) +_
(ButtonWidth / 2)), CInt((Height - MyControlArray(i).Height) / 2))

Я уже пробовал:

New Point(CInt(((Width - ButtonWidth) / 2)), CInt((Height - MyControlArray(i).Height)_
/ 2))

Ответы [ 2 ]

7 голосов
/ 31 июля 2011

Это потому, что вы используете неправильные переменные, ширина и высота включают границы и заголовок. Вместо этого вы должны использовать свойство ClientSize. Как это:

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
    MyBase.OnLoad(e)
    Dim btn = New Button()
    Controls.Add(btn)
    btn.Location = New Point((ClientSize.Width - btn.Width) \ 2, _
                             (ClientSize.Height - btn.Height) \ 2)
End Sub
3 голосов
/ 02 июня 2016

Установка для свойства Anchor значения AnchorStyles.None приведет к центрированию элемента управления как по горизонтали, так и по вертикали.

control.Anchor = AnchorStyles.None

Для поддержания вертикального положения (только горизонтальное центрирование):

control.Anchor = AnchorStyles.Top

Для поддержания горизонтального позиционирования (только вертикальное центрирование):

control.Anchor = AnchorStyles.Left

Источник

Я попробовал, и это сработало для меня. Элемент управления будет находиться в центре родительского элемента.

...