Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно отмасштабировать окно с элементами? 
:(
    Опции темы
vlsaf
Дата 25.10.2008, 12:44 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



Всем привет.

Имеется окно с контролами. Кнопки, текстбоксы, лаблы и т.д.
Задача такая, нужно это окно и все его содержимое увеличить или уменьшить в N раз.
(в полтора раза для примера).

Как это делается?
Говорят, что можно как-то все сожержимое окна перебрать в цикле и очень просто там все пометять?
PM   Вверх
diadiavova
Дата 25.10.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



А почему бы при расположении элементов на форме не воспользоваться такими свойствами как Dock и Anchor?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vlsaf
Дата 25.10.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



Это не то.  
Можно извращаться таким образом, но есть путь покрасивше.
Я видел, как работает такая штука безо всяких Dock и Anchor.
Впечатлился.
PM   Вверх
diadiavova
Дата 25.10.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Извинясь - ступил. Они масштабирут не пропорционально, да и видимо речь идёт не об изменении размеров контейнера.
Если надо изменить размеры в N-ное количество раз то обходить в цикле надо соллекцию Controls формы и менять размеры каждого контрола. Правда в этом случае содержимое контейнеров не будет затронуто. Контейнеры надо обходить рекурсивно. Кроме того лейблы и прочие подобные элементы имеют по умолчанию Autosize = true это надо поменять.

Но тут у меня есть подозрение, что речь идёт не столько о масштабировании элементов, но и их содержимого(например текста, который сам не поменяет размер шрифта при увеличении размеров лейбла или текстбокса). Там и подход другой. Я сам не пробовал, но если нужно именно это - могу подсказать направление, в котором стоит покопать.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
MasterOfCode
Дата 25.10.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Логичнее было бы предположить что этот вопрос задать в разделе Разработка Windows Forms


--------------------
user posted image
PM ICQ   Вверх
diadiavova
Дата 25.10.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Вообще-то у контрола есть метод Scale, пропорционально меняющий размер как самого контрола, так и вложенных внего контролов. Возможно именно это имеется в виду?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vlsaf
Дата 25.10.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



Именно перебор в цикле коллекции.

Как это делается?

Я уже понял, что мне нужно.
Поменять Тор, Left, Width, Height и Font.Size для каждого контрола
Уменьшить или увеличить их, так, как надо.

Вроде больше ничего (на первый взгляд.)
Потом видно будет, что да как.
PM   Вверх
diadiavova
Дата 25.10.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Ну, если в текущей форме это делать и только с контролами самой формы, а не вложенными в контейнеры тогда примерно так
Код

foreach(Control cont in this.Controls)
{
    //здесь обрабатываем сонтролы
    cont.Width = cont.Width*2;
    cont.Height=cont.Height*2;// и так далее
}


надо помнить о том, что если исходный размер умножается на дробное число, то в результате может получиться дробь, поэтому надо выполнить преобразование к типу Int32. Если надо это провернуть сне с самой формой, а с другим контролом, тогда вместо this указать его. А если ещё и вложенные контейнеры надо обойти, тогда потребуется рекурсивный обход.

Добавлено через 19 секунд
Ну, если в текущей форме это делать и только с контролами самой формы, а не вложенными в контейнеры тогда примерно так
Код

foreach(Control cont in this.Controls)
{
    //здесь обрабатываем сонтролы
    cont.Width = cont.Width*2;
    cont.Height=cont.Height*2;// и так далее
}


надо помнить о том, что если исходный размер умножается на дробное число, то в результате может получиться дробь, поэтому надо выполнить преобразование к типу Int32. Если надо это провернуть сне с самой формой, а с другим контролом, тогда вместо this указать его. А если ещё и вложенные контейнеры надо обойти, тогда потребуется рекурсивный обход.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vlsaf
Дата 25.10.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 9.5.2007

Репутация: нет
Всего: 1



Вот это для меня было самым важным 
foreach(Control cont in this.Controls)

Сенкс smile и +
PM   Вверх
diadiavova
Дата 25.10.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Ну, если в текущей форме это делать и только с контролами самой формы, а не вложенными в контейнеры тогда примерно так
Код

foreach(Control cont in this.Controls)
{
    //здесь обрабатываем сонтролы
    cont.Width = cont.Width*2;
    cont.Height=cont.Height*2;// и так далее
}


надо помнить о том, что если исходный размер умножается на дробное число, то в результате может получиться дробь, поэтому надо выполнить преобразование к типу Int32. Если надо это провернуть сне с самой формой, а с другим контролом, тогда вместо this указать его. А если ещё и вложенные контейнеры надо обойти, тогда потребуется рекурсивный обход.

Добавлено через 1 минуту и 20 секунд
А всё-таки к методу Scale присмотреться стОит.

Добавлено через 1 минуту и 48 секунд
Ну, если в текущей форме это делать и только с контролами самой формы, а не вложенными в контейнеры тогда примерно так
Код

foreach(Control cont in this.Controls)
{
    //здесь обрабатываем сонтролы
    cont.Width = cont.Width*2;
    cont.Height=cont.Height*2;// и так далее
}


надо помнить о том, что если исходный размер умножается на дробное число, то в результате может получиться дробь, поэтому надо выполнить преобразование к типу Int32. Если надо это провернуть сне с самой формой, а с другим контролом, тогда вместо this указать его. А если ещё и вложенные контейнеры надо обойти, тогда потребуется рекурсивный обход.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Partizan
Дата 26.10.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Цитата

Всем привет.

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


LayoutPanel не помогает?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.