Я заметил, что некоторые приложения меняют положение своих элементов управления, чтобы как можно больше приспособить их к разрешению. Если окно максимизировано, они устанавливаются таким образом, что по всему графическому интерфейсу выглядит сбалансированным. Мой вопрос в том, можно ли реализовать или реализовать эту функциональность в Visual Studio 2010 С#?
Как автоматическое изменение размера и настройка элементов управления формы с изменением разрешения
Ответ 1
Используйте Dock и Anchor свойства, Здесь хорошая статья. Обратите внимание, что они будут обрабатывать изменения при максимизации/минимизации. Это немного отличается, если разрешение экрана меняется, но оно будет по той же идее.
Ответ 2
Используйте их для получения желаемого результата:
-
Установите для свойства
Anchor
значение None, элементы управления не будут изменены, они только сдвинут свое положение. -
Установите для свойства
Anchor
значение Top + Bottom + Left + Right, элементы управления будут изменены, но они не изменят свое положение. -
Установите
Minimum Size
формы в правильное значение. -
Задайте свойство
Dock
. -
Используйте
Form Resize
событие, чтобы изменить все, что вы хотите
Я не знаю, как размер шрифта (label, textbox, combobox и т.д.) будет затронут в (1) - (4), но его можно контролировать в (5).
Ответ 3
float widthRatio = Screen.PrimaryScreen.Bounds.Width / 1280;
float heightRatio = Screen.PrimaryScreen.Bounds.Height / 800f;
SizeF scale = new SizeF(widthRatio, heightRatio);
this.Scale(scale);
foreach (Control control in this.Controls)
{
control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio);
}
Ответ 4
.. и для обнаружения изменения разрешения для его обработки (как только вы используете Docking и Anchoring, например SwDevMan81) используйте SystemEvents.DisplaySettingsChanged event в Microsoft.Win32.
Ответ 5
в событии load формы добавьте эту строку
this.WindowState = FormWindowState.Maximized;
Ответ 6
Здесь я люблю использовать https://www.netresize.net/index.php?c=3a&id=11#buyopt. Но это платная версия.
Вы также можете получить их исходные коды, если купите 1 лицензию на сайт (Unlimited Developers).
Как только я нахожу пакетное решение nuget.
Ответ 7
добавить этот код при загрузке страницы для всех элементов управления или добавить все элементы управления в контейнеры
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;
Ответ 8
private void MainForm_Load( object sender, EventArgs e )
{
this.Size = Screen.PrimaryScreen.WorkingArea.Size
}
Ответ 9
this.WindowState = FormWindowState.Maximized;