Определить размер AutoSize элемента управления во время выполненияC#

Место общения программистов C#
Anonymous
Определить размер AutoSize элемента управления во время выполнения

Сообщение Anonymous »

Я хочу размещать элементы управления во время выполнения (создавать динамически). Для целей этого вопроса давайте ограничимся элементом управления Button. Я хочу установить свойства элемента управления (например, «Текст»), а затем определить минимальный размер элемента управления, чтобы он отображался правильно; размер, который даст установка AutoSize = true. В примере кода C# GetAutoSizeSize соответствует этому минимальному размеру:

Код: Выделить всё

Button button = new Button();
this.Controls.Add(button);

button.Text = "Example";
button.Size = GetAutoSizeSize(button);
button.Location = /* Some calculation based on button.Size */


Возможное решение: AutoSize

Можно установить кнопку .AutoSize = true и button.AutoSizeMode = AutoSizeNode.GrowAndShrink. После этого можно получить кнопку button.Size, после чего можно отключить AutoSize и изменить размер элемента управления.

Потенциал проблемы:
  • Это выглядит странно, и я не могу не чувствовать, что это может легко сломаться, но, может быть, я ошибаюсь?
Возможное решение: GetPreferredSize

Код: Выделить всё

button.GetPreferredSize
можно использовать для получения желаемого размера элемента управления.

Проблемы с этим:

< ul>
Его использование является внутренним и/или предназначено для потоковой компоновки.
[*]

Код: Выделить всё

GetPreferredSize
принимает в качестве параметра предложенный размер, поэтому нужно догадаться, какой из них подойдет.
[*]Возвращаемый размер неправильный, поскольку он возвращает «удобный» размер элемент управления, который может быть намного больше минимального размера, который дает AutoSize.




EDIT: Из комментариев и некоторых проб и ошибок я смог сделать вывод, что проблемы, которые я первоначально перечислил с методом AutoSize, были связаны с необходимостью одновременного использования обоих элементов управления. сначала добавляется в коллекцию элементов управления, а для AutoSizeMode установлено значение GrowAndShrink.

Я хотел бы знать, есть ли функция (и/или более «надежный» способ) определения размера AutoSize: функция типа GetPreferredSize, которая возвращает размер без фактического переключения AutoSize.

Подробнее здесь: https://stackoverflow.com/questions/285 ... at-runtime

Вернуться в «C#»