Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/43: Рейтинг темы: голосов - 43, средняя оценка - 4.86
2 / 2 / 0
Регистрация: 05.01.2011
Сообщений: 16

Как сохранить пропорции Panel при изменении размеров формы

15.10.2012, 17:15. Показов 8963. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме есть Panel которую нужно всегда сохранять квадратной вне зависимости от размера родительской формы.
Первое что пришло в голову это пара вложенных SplitContainer, и в их событии .Resize корректировать SplitterDistance:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private void Resize_()
        {
            int x = panel1 .Size .Width  ;
            int y = panel1.Size .Height-4;
 
            if (x < y)
            {
                sc1.SplitterDistance = x;
                sc2.SplitterDistance = x;
            }
            else
            {
                sc1.SplitterDistance = y;
                sc2.SplitterDistance = y;
            }
        }
Вроде должно работать, но появляется дребезг - размеры Panel1 не всегда равны, бывает одна сторона больше другой на пару пикселов.
Может есть более другой красивый способ сделать это ? На форме в принципе будет только одна панель и все. больше ничего не будет.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2012, 17:15
Ответы с готовыми решениями:

Изменение размеров элементов, сохраняя пропорции, при изменении размеров самой формы
Как изменять размеры элементов, сохраняя пропорции, при изменении размеров самой формы?

Затирается изображение в Panel, при изменении размеров формы
Пользуясь данной: https://www.cyberforum.ru/csharp-beginners/thread785825.html темой решил создать что то подобное. Я создал свой...

Как сохранить размер элементов на сцене при изменении размеров на QGraphicsView?
Добавляю несколько эллипсов на сцену, а потом увеличиваю через scale на GraphicsView, но оно увеличивает и сами эллипсы. Как можно...

6
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
15.10.2012, 17:29
эм... тогда если ты пользуешся стандартными контролами, пользуйся стандартными свойствами к ним)

Dock - "заливание" // в данном случае подходит мало
Anchor - привязка к границе - в данном случае само то, ставишь top,left,right,bottom (т.е. всё), а потом добавляешь обработчик на событие Resize:

C#
1
2
3
4
5
6
7
8
 private void panel1_Resize(object sender, EventArgs e)
        {
//определяется какая граница панели меньше
            int minSize = panel1.Width > panel1.Height ? panel1.Height : panel1.Width;
//переизменяются ширина и высота
            panel1.Height = minSize;
            panel1.Width = minSize;
        }
минус данного метода в том что событие Resize вызовется дважды на каждое изменение границ панели. можешь убрать обработчик от события в начале метода и вернуть в конце, но не думаю что по быстродействию это поможет)
0
2 / 2 / 0
Регистрация: 05.01.2011
Сообщений: 16
16.10.2012, 00:36  [ТС]
Переделал. Получил следующее:

C#
1
2
3
4
5
6
7
8
9
        private void Resize_()
        {
            //определяется какая граница панели меньше
            int minSize = (this.Width - 10) > (this.Height - 30) ? (this.Height -30) : (this.Width - 10);
            //переизменяются ширина и высота
            panel2.Height = minSize;
            panel2.Width = minSize;
            
        }
Возник попутно еще вопрос.
this.width и this.height задают размеры родительской формы. Мне из этих размеров нужно вычесть верхнюю синюю шапку, и три бортика по остальным сторонам. Сейчас это сделано "на шару" -10 -30.
Но скажем юзер изменив тему винды невольно изменит параметры этих элементов и будет печаль. Как вытянуть из формы размеры этих элементов или просто тупо область для дочерних элементов ?
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
16.10.2012, 08:20
Цитата Сообщение от grv Посмотреть сообщение
Мне из этих размеров нужно вычесть верхнюю синюю шапку, и три бортика по остальным сторонам.
Form.ClientSize
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
16.10.2012, 10:05
Margin
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
16.10.2012, 10:11
Цитата Сообщение от grv Посмотреть сообщение
Как сохранить пропорции Panel при изменении размеров формы
свойство Anchor (если панель занимает не всю форму), Dock (если занимает всю форму). При более сложной компоновке нескольких элементов управления необходимо использовать TableLayoutPanel
0
2 / 2 / 0
Регистрация: 05.01.2011
Сообщений: 16
17.10.2012, 17:15  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
Form.ClientSize
О! Заработало . спс.

Добавлено через 55 секунд
Цитата Сообщение от Noob.net Посмотреть сообщение
Не. у меня winforms.

Добавлено через 1 минуту
Цитата Сообщение от nio Посмотреть сообщение
свойство Anchor (если панель занимает не всю форму), Dock (если занимает всю форму). При более сложной компоновке нескольких элементов управления необходимо использовать TableLayoutPanel
Ну да, Anchor + Form.clientsize. Вопрос закрыт. спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2012, 17:15
Помогаю со студенческими работами здесь

Автоматическое изменение размеров компонентов при изменении размеров формы
Приветствую. Подскажите. Форма по умолчанию при запуске приложения открывается по центру. Если необходимо развернуть форму на весь экран,...

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

Центрировать кнопки при создании формы и при изменении размеров формы.
Спасайте) Центрировать кнопки при создании формы и при изменении размеров формы. Спасибо

При изменении размеров формы раздается щелчок, а сами размеры выводятся в заголовке формы
При изменении размеров формы раздается щелчок, а сами размеры выводятся в заголовке формы.

Как сделать так, чтобы при изменении размеров формы компоненты на форме тоже изменяли свои размеры?
Если форма развернута на весь экран, то все компоненты выглядят как нужно (см.скрин 1), а если окно формы уменьшить, то компоненты остаются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru