C # Anchor свойство не работает - PullRequest
4 голосов
/ 21 октября 2009

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

Например, у меня есть две кнопки в правом нижнем углу формы - они находятся на форме, без контейнеров или чего-то в этом роде. Якорь = снизу, справа. FormBorderStyle = Sizable. Но когда я перетаскиваю форму во время работы, кнопки не двигаются.

Я что-то упустил?

c # 2005

Ответы [ 8 ]

10 голосов
/ 21 октября 2009

Другая возможность может заключаться в том, что вы случайно разместили свои кнопки не непосредственно в форме. Вместо этого вы помещаете их в некоторый контейнер (например, panel, tableLayoutPanel и т. Д.), И этот контейнер не имеет правильных значений привязки или закрепления.

Просто чтобы быть абсолютно уверенным, вы должны заглянуть в designer.cs и проверить, добавлены ли ваши кнопки непосредственно в форму с помощью функции this.Controls.Add() или они добавлены в любой другой список элементов управления (например, panel.Controls.Add()). ).

4 голосов
/ 11 сентября 2011

Я знаю этот старый пост, но я бы все равно попытался внести свой вклад.

Моя проблема заключалась в том, что форма, которую я добавлял в панель, не настраивалась автоматически, когда размер родительской панели изменился.

Проблема была в том, что я делал это:

form.WindowState = FormWindowState.Maximized; // <-- source of the problem
form.AutoSize = true; //this causes the form to grow only. Don't set it if you want to resize automatically using AnchorStyles, as I did below.
form.FormBorderStyle = FormBorderStyle.Sizable; //I think this is not necessary to solve the problem, but I have left it there just in case :-)
panel1.Controls.Add(form);
form.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                    | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
form.Dock = DockStyle.Fill; //this provides the initial size adjust to parent' size.
form.Visible = true;

Чтобы решить, я просто прокомментировал первую строку //form.WindowState = FormWindowState.Maximized;, и все заработало как шарм.

4 голосов
/ 16 ноября 2010

Также, если вы установили свойство auto size, это вызовет проблемы.

3 голосов
/ 21 октября 2009

Для чего установлено свойство Dock? Это может свести на нет свойства привязки.

1 голос
/ 26 августа 2012

У меня такая же проблема в бета-версии VS11. Я использовал якоря много раз, и он всегда работал правильно, но теперь я не могу понять, что с ними происходит, и не только - заполнение дока тоже не работает! (свойства auto size или dock не используются)

P.S. (через 40 минут) Теперь, похоже, я нашел проблему: у меня есть прослушиватель события Resize для PictureBox, и я создаю новое изображение для нового размера изображения в обработчике onResize. Когда я удаляю создание нового изображения, все работает!

Теперь я использую событие SizeChanged и в этом обработчике событий создаю новый образ. Поэтому я не должен менять объект отправителя до тех пор, пока не завершится изменение размера.

0 голосов
/ 04 октября 2018

Если ваша форма локализуема, проверьте, не сделали ли вы какие-либо изменения привязки / закрепления на другом языке.

0 голосов
/ 29 августа 2017

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

0 голосов
/ 29 сентября 2011

У меня была точно такая же проблема.

Положение:

TableLayoutPanel с одной строкой, установленной на autosize. В этом ряду привязка Right, Bottom НЕ работала. Удаление autoSize и установка его на фиксированную высоту решили проблему, как предписано пользователем 428955.

...