ANOOP CL NAIR Ответов: 7

Как подогнать форму Windows к любому разрешению экрана?


Привет, я работаю над проектом window appication в visual studio-10...Моя форма была разработана в разрешении 1600 x 900.

Мои клиенты используют другое разрешение. Чтобы решить эту проблему, я попробовал ниже код на странице загрузки...но он не работает должным образом....если это возможно, пожалуйста, скажите мне код для решения....Заранее спасибо

this.Location = new Point(0, 0);
this.Size = Screen.PrimaryScreen.WorkingArea.Size;

7 Ответов

Рейтинг:
56

Aarti Meswania

this.Size = Screen.PrimaryScreen.WorkingArea.Size;

эта строка может изменять только размер оконной формы (она не влияет на расположение элементов управления и их размер)

для размещения вашей формы в любом окне используйте
this.windowstate = maximized


а для элементов управления вы должны использовать свойство anchor &dock
или вы также можете рассчитать и установить местоположение и размер времени выполнения элементов управления.

Счастливого Кодирования!
:)


ANOOP CL NAIR

спасибо за ваш приятный комментарий...

Member 13006928

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

Рейтинг:
38

OriginalGriff

Если вы используете Winforms, то, скорее всего, вы не сможете сделать это с каким - либо реальным успехом-вы можете сделать это в WPF, потому что он очень отличается.

Однако в Winforms простое изменение размера общей формы автоматически не влияет на размер ее содержимого - это может произойти, если у вас правильно установлены свойства якоря и док-станции, но даже тогда это не влияет на размер текста в кнопках, ярлыках и т. д., поэтому полученная форма может выглядеть очень глупо.

Нет никакого реального короткого пути. Лучшее решение - спроектировать форму для работы с минимальным разрешением и позволить пользователю масштабировать ее, а не начинать с максимального разрешения и пытаться уменьшить масштаб.

Извините, но я думаю, что вам придется проделать изрядную работу!


ANOOP CL NAIR

спасибо за ваш приятный комментарий...

OriginalGriff

Всегда пожалуйста!

Рейтинг:
2

Yatin chauhan

Вы можете использовать вот так :-


this.windowstate = maximized


ANOOP CL NAIR

спасибо за ваш хороший комментарий

Yatin chauhan

Всегда Добро Пожаловать Дорогая..........!!!!!!!!!

Рейтинг:
1

Prasad_Kulkarni

Стыковка может помочь, конечно. Просто посмотрите в свойствах элемента управления, как вы хотите быть независимым от разрешения и установить стыковку, а затем элемент управления автоматически изменяет размер тоже, когда форма делает это.
Для получения дополнительной информации см. Эту статью CP;
Anchoring, Docking Свойства элементов управления в Windows Forms:
Работа с якорными и стыковочными свойствами[^]

Дочерние элементы управления якоря и стыковки[^]
Дочерние элементы управления якоря и стыковки[^]

И посмотрите на подобные дискуссии, вы обязательно получите от них нужное:
Зом из неполадок, когда разрешение экрана меняется[^]
Графический внешний вид - C#.Net[^]
как закрепить кнопку так, чтобы она могла подстраиваться под форму[^]


ANOOP CL NAIR

спасибо за ваш хороший комментарий

Рейтинг:
1

oshamed

Используйте элемент управления tablelayout. Это работает на меня.


CHill60

"Это работает на меня" .. молодец ты! Однако такого контроля нет (это TableLayoutПанель контроль). Это также не очень важно для разрешения экрана, вам все равно придется использовать стыковку и Якорь, как описано в других решениях от 2012 года. Кроме того, судя по документации Microsoft, это было бы неуместно в данном случае.

Рейтинг:
0

Jeff Lyons

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

private void FormAutoResolution_Load(object sender, EventArgs e)
{
    // Scale our form to look like it did when we designed it.
    // This adjusts between the screen resolution of the design computer and the workstation.
    int ourScreenWidth = Screen.FromControl(this).WorkingArea.Width;
    int ourScreenHeight = Screen.FromControl(this).WorkingArea.Height;
    float scaleFactorWidth = (float)ourScreenWidth / 1600f;
    float scaleFactorHeigth = (float)ourScreenHeight / 900f;
    SizeF scaleFactor = new SizeF(scaleFactorWidth, scaleFactorHeigth);
    Scale(scaleFactor);

    // If you want to center the resized screen.
    CenterToScreen();
}


Рейтинг:
0

Member 14136536

Я предлагаю не использовать свойства док-станции и якоря. Они кошмарны.
1. Просто оставьте якорь с выделенными верхним и левым краями.
2. Получите перед измерениями размера экрана следующий метод:
AnteWidth = Me.Width и AnteHeight = Me.Height
Вам нужно объявить AnteWidth, Anteheight или любые другие имена в качестве переменных.
3.Получите текущие измерения высоты и ширины экрана, используя следующий метод:
Dim screenWidth As Integer = Screen.Первичный экран.Рабочая зона.Ширина
Dim screenHeight As Integer = Screen.Первичный экран.Рабочая зона.Высота
4. Рассчитать ширину и высоту следующим образом:
WidthRatio = screenWidth/AnteWidth и HeightRatio = screenHeight/AnteHeight

На следующем шаге умножьте измерения ширины и высоты каждого элемента управления с соответствующими соотношениями.
Пример: Кнопка Button1.Ширина = Кнопка 1.Ширина * WidthRatio
Кнопка 1.Высота = Кнопка 1.Высота * HeightRatio
Вам также нужно назначить новые местоположения элементам управления, которые находятся рядом с самым левым элементом управления. Вы поймете это интуитивно.
Весь этот код должен быть введен в область загрузки формы после того, как размер формы будет сведен к минимуму, чтобы новый дисплей полностью занял экран. Это утомительно, но работает идеально.


Dave Kreskowiak

Во-первых, этот вопрос был задан и получил ответ семь лет назад.

Далее, Anchor, Dock, TableLayoutPanel, FlowLayoutPanel и другие элементы управления и свойства могут быть "кошмаром" для вас, но не для других людей. Я ненавижу писать код для ситуаций, когда мне это не нужно. У меня нет проблем с правильным использованием элементов управления для различных разрешений, и мне не нужно писать ни одной строки кода, чтобы сделать это.

CHill60

"Я предлагаю не использовать свойства док - станции и якоря" - к сожалению, Ваш совет противоречит практически каждому другому опытному разработчику в стеке Windows!
Ваш подход был хорош в VB6, который вышел из поддержки в 2005 году, так что вы устарели всего на 13 лет.
Программирование-это использование инструментов, доступных для выполнения работы, а разработка современных языков-это предоставление разработчикам этих инструментов. Я бы посоветовал вам быть в курсе новых событий на выбранном вами языке(или изучать новые языки), иначе вы можете оказаться безработным. Я видел, как это происходит.