Код: Выделить всё
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 и изменить размер элемента управления.
Потенциал проблемы:
- Это выглядит странно, и я не могу не чувствовать, что это может легко сломаться, но, может быть, я ошибаюсь?
Код: Выделить всё
button.GetPreferredSizeПроблемы с этим:
< ul>
Его использование является внутренним и/или предназначено для потоковой компоновки.
[*]
Код: Выделить всё
GetPreferredSize[*]Возвращаемый размер неправильный, поскольку он возвращает «удобный» размер элемент управления, который может быть намного больше минимального размера, который дает AutoSize.
EDIT: Из комментариев и некоторых проб и ошибок я смог сделать вывод, что проблемы, которые я первоначально перечислил с методом AutoSize, были связаны с необходимостью одновременного использования обоих элементов управления. сначала добавляется в коллекцию элементов управления, а для AutoSizeMode установлено значение GrowAndShrink.
Я хотел бы знать, есть ли функция (и/или более «надежный» способ) определения размера AutoSize: функция типа GetPreferredSize, которая возвращает размер без фактического переключения AutoSize.
Подробнее здесь: https://stackoverflow.com/questions/285 ... at-runtime