| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Как можно отмасштабировать окно с элементами? |
| Автор: vlsaf 25.10.2008, 12:44 |
| Всем привет. Имеется окно с контролами. Кнопки, текстбоксы, лаблы и т.д. Задача такая, нужно это окно и все его содержимое увеличить или уменьшить в N раз. (в полтора раза для примера). Как это делается? Говорят, что можно как-то все сожержимое окна перебрать в цикле и очень просто там все пометять? |
| Автор: diadiavova 25.10.2008, 13:10 |
| А почему бы при расположении элементов на форме не воспользоваться такими свойствами как Dock и Anchor? |
| Автор: vlsaf 25.10.2008, 13:25 |
| Это не то. Можно извращаться таким образом, но есть путь покрасивше. Я видел, как работает такая штука безо всяких Dock и Anchor. Впечатлился. |
| Автор: diadiavova 25.10.2008, 13:30 |
| Извинясь - ступил. Они масштабирут не пропорционально, да и видимо речь идёт не об изменении размеров контейнера. Если надо изменить размеры в N-ное количество раз то обходить в цикле надо соллекцию Controls формы и менять размеры каждого контрола. Правда в этом случае содержимое контейнеров не будет затронуто. Контейнеры надо обходить рекурсивно. Кроме того лейблы и прочие подобные элементы имеют по умолчанию Autosize = true это надо поменять. Но тут у меня есть подозрение, что речь идёт не столько о масштабировании элементов, но и их содержимого(например текста, который сам не поменяет размер шрифта при увеличении размеров лейбла или текстбокса). Там и подход другой. Я сам не пробовал, но если нужно именно это - могу подсказать направление, в котором стоит покопать. |
| Автор: MasterOfCode 25.10.2008, 13:52 |
| Логичнее было бы предположить что этот вопрос задать в разделе Разработка Windows Forms |
| Автор: diadiavova 25.10.2008, 14:01 |
| Вообще-то у контрола есть метод Scale, пропорционально меняющий размер как самого контрола, так и вложенных внего контролов. Возможно именно это имеется в виду? |
| Автор: vlsaf 25.10.2008, 14:17 |
| Именно перебор в цикле коллекции. Как это делается? Я уже понял, что мне нужно. Поменять Тор, Left, Width, Height и Font.Size для каждого контрола Уменьшить или увеличить их, так, как надо. Вроде больше ничего (на первый взгляд.) Потом видно будет, что да как. |
| Автор: diadiavova 25.10.2008, 14:43 | ||||
Ну, если в текущей форме это делать и только с контролами самой формы, а не вложенными в контейнеры тогда примерно так
надо помнить о том, что если исходный размер умножается на дробное число, то в результате может получиться дробь, поэтому надо выполнить преобразование к типу Int32. Если надо это провернуть сне с самой формой, а с другим контролом, тогда вместо this указать его. А если ещё и вложенные контейнеры надо обойти, тогда потребуется рекурсивный обход. Добавлено через 19 секунд Ну, если в текущей форме это делать и только с контролами самой формы, а не вложенными в контейнеры тогда примерно так
надо помнить о том, что если исходный размер умножается на дробное число, то в результате может получиться дробь, поэтому надо выполнить преобразование к типу Int32. Если надо это провернуть сне с самой формой, а с другим контролом, тогда вместо this указать его. А если ещё и вложенные контейнеры надо обойти, тогда потребуется рекурсивный обход. |
| Автор: vlsaf 25.10.2008, 14:52 |
| Вот это для меня было самым важным foreach(Control cont in this.Controls) Сенкс |
| Автор: diadiavova 25.10.2008, 14:52 | ||||
Ну, если в текущей форме это делать и только с контролами самой формы, а не вложенными в контейнеры тогда примерно так
надо помнить о том, что если исходный размер умножается на дробное число, то в результате может получиться дробь, поэтому надо выполнить преобразование к типу Int32. Если надо это провернуть сне с самой формой, а с другим контролом, тогда вместо this указать его. А если ещё и вложенные контейнеры надо обойти, тогда потребуется рекурсивный обход. Добавлено через 1 минуту и 20 секунд А всё-таки к методу Scale присмотреться стОит. Добавлено через 1 минуту и 48 секунд Ну, если в текущей форме это делать и только с контролами самой формы, а не вложенными в контейнеры тогда примерно так
надо помнить о том, что если исходный размер умножается на дробное число, то в результате может получиться дробь, поэтому надо выполнить преобразование к типу Int32. Если надо это провернуть сне с самой формой, а с другим контролом, тогда вместо this указать его. А если ещё и вложенные контейнеры надо обойти, тогда потребуется рекурсивный обход. |
| Автор: Partizan 26.10.2008, 12:52 | ||
LayoutPanel не помогает? |