Как автоматически изменять размер и настраивать элементы управления формы с изменением разрешения

Я заметил, что некоторые приложения меняют положение своих элементов управления, чтобы максимально настроить их в разрешении. Если окно развернуто, они настраиваются таким образом, что весь графический интерфейс выглядит сбалансированным. Мой вопрос в том, можно ли сделать или реализовать эту функциональность в Visual Studio 2010 С#?


person Afnan Bashir    schedule 22.11.2010    source источник


Ответы (9)


Используйте Dock и Якорь. Вот хороший статья. Обратите внимание, что они будут обрабатывать изменения при максимизации/минимизации. Это немного отличается от изменения разрешения экрана, но идея будет той же.

person SwDevMan81    schedule 22.11.2010
comment
Я должен упомянуть AutoScaleMode, который заставил меня потратить много времени на игры с Anchor&Dock (на самом деле это не было проблемой...) - person ephraim; 07.05.2018

Используйте их комбинации, чтобы получить желаемый результат:

  1. Установите для свойства Anchor значение None, размеры элементов управления не будут изменяться, они только меняют свое положение.

  2. Установите для свойства Anchor значение Top+Bottom+Left+Right, размеры элементов управления будут изменены, но их положение не изменится.

  3. Установите правильное значение Minimum Size формы.

  4. Установите свойство Dock.

  5. Используйте событие Form Resize, чтобы изменить все, что хотите

Я не знаю, как размер шрифта (метка, текстовое поле, поле со списком и т. д.) будет затронут в (1) - (4), но его можно контролировать в (5).

person Bhaskar    schedule 25.11.2014

... и чтобы обнаружить изменение разрешения для его обработки (если вы используете стыковку и привязку, как предложил SwDevMan81), используйте файл событие SystemEvents.DisplaySettingsChanged в Microsoft.Win32.

person Thushan Fernando    schedule 23.11.2010

Здесь мне нравится использовать https://www.netresize.net/index.php?c=3a&id=11#buyopt. Но это платная версия.

Вы также можете получить их исходные коды, если купите 1 лицензию на сайт (неограниченное количество разработчиков).

Как бы то ни было, я нахожу решение для пакета nuget.

person Zin Min    schedule 08.08.2019

извините, я поздно увидел вопрос. Вот простое программное решение, которое хорошо работает на мне,

Создайте эти глобальные переменные:

 float firstWidth;
 float firstHeight;

после загрузки заполните эти переменные;

 firstWidth = this.Size.Width;
 firstHeight = this.Size.Height;

затем выберите свою форму и поместите этот код в событие SizeChange вашей формы;

 private void AnaMenu_SizeChanged(object sender, EventArgs e)
    {
        

        float size1 = this.Size.Width /  firstWidth;
        float size2 = this.Size.Height / firstHeight;

            SizeF scale = new SizeF(size1, size2);
        firstWidth = this.Size.Width;
        firstHeight = this.Size.Height;

        foreach (Control control in this.Controls)
        {
                
            control.Font = new Font(control.Font.FontFamily, control.Font.Size* ((size1+ size2)/2));
            
            control.Scale(scale);
                

        }


    }

Я надеюсь, что это поможет, это отлично работает на моих проектах.

person Muhammed Lutfu ODABASOGLU    schedule 25.08.2020

добавьте этот код при загрузке страницы, сделайте для всего управления или добавьте все управление в контейнеры

int x;
Point pt = new Point();
x = Screen.PrimaryScreen.WorkingArea.Width - 1024;
x = x / 2;
pt.Y = groupBox1.Location.Y + 50;
pt.X = groupBox1.Location.X + x;
groupBox1.Location = pt;
person chirag    schedule 04.02.2013

в событии загрузки формы добавьте эту строку

this.WindowState = FormWindowState.Maximized;
person soldiershin    schedule 14.06.2013

person    schedule
comment
@AfnanBashir, возможно, но это сэкономит вам массу времени, если у вас уже есть форма Windows с множеством элементов управления. +1 - person ; 12.10.2015
comment
Это интересный подход (даже если бы расчет отношения можно было бы улучшить). Якобы он полагается на AutoScaleMode формы, являющейся Font. - person Zeus; 08.07.2021

person    schedule
comment
Добро пожаловать в Stack Overflow! Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и/или как этот код отвечает на вопрос, повышает его ценность в долгосрочной перспективе. - person ryanyuyu; 29.09.2016
comment
Этот код только развернет ваши окна, но размер всех элементов управления внутри окон не будет динамически изменяться. - person Vincent Elbert Budiman; 04.05.2018