Я заметил, что некоторые приложения меняют положение своих элементов управления, чтобы максимально настроить их в разрешении. Если окно развернуто, они настраиваются таким образом, что весь графический интерфейс выглядит сбалансированным. Мой вопрос в том, можно ли сделать или реализовать эту функциональность в Visual Studio 2010 С#?
Как автоматически изменять размер и настраивать элементы управления формы с изменением разрешения
Ответы (9)
Используйте Dock и Якорь. Вот хороший статья. Обратите внимание, что они будут обрабатывать изменения при максимизации/минимизации. Это немного отличается от изменения разрешения экрана, но идея будет той же.
Используйте их комбинации, чтобы получить желаемый результат:
Установите для свойства
Anchor
значение None, размеры элементов управления не будут изменяться, они только меняют свое положение.Установите для свойства
Anchor
значение Top+Bottom+Left+Right, размеры элементов управления будут изменены, но их положение не изменится.Установите правильное значение
Minimum Size
формы.Установите свойство
Dock
.Используйте событие
Form Resize
, чтобы изменить все, что хотите
Я не знаю, как размер шрифта (метка, текстовое поле, поле со списком и т. д.) будет затронут в (1) - (4), но его можно контролировать в (5).
... и чтобы обнаружить изменение разрешения для его обработки (если вы используете стыковку и привязку, как предложил SwDevMan81), используйте файл событие SystemEvents.DisplaySettingsChanged в Microsoft.Win32.
Здесь мне нравится использовать https://www.netresize.net/index.php?c=3a&id=11#buyopt. Но это платная версия.
Вы также можете получить их исходные коды, если купите 1 лицензию на сайт (неограниченное количество разработчиков).
Как бы то ни было, я нахожу решение для пакета nuget.
извините, я поздно увидел вопрос. Вот простое программное решение, которое хорошо работает на мне,
Создайте эти глобальные переменные:
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);
}
}
Я надеюсь, что это поможет, это отлично работает на моих проектах.
добавьте этот код при загрузке страницы, сделайте для всего управления или добавьте все управление в контейнеры
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;
в событии загрузки формы добавьте эту строку
this.WindowState = FormWindowState.Maximized;
AutoScaleMode
формы, являющейся Font
.
- person Zeus; 08.07.2021