Как определить, на каком мониторе работает моя программа .NET Windows Forms?
У меня есть приложение С# Windows, которое я хочу обеспечить, будет отображаться на втором мониторе, если пользователь переместит его на один. Мне нужно сохранить размер основной формы, местоположение и состояние окна, которые я уже обработал, но мне также нужно знать, на каком экране он был включен, когда пользователь закрыл приложение.
Я использую класс Screen для определения размера текущего экрана, но я не могу найти ничего о том, как определить, на каком экране было запущено приложение.
Изменить: Спасибо за ответы, всем! Я хотел бы определить, на каком мониторе было окно, чтобы я мог выполнить правильную проверку границ, если пользователь случайно вывел окно за пределы области просмотра или изменил размер экрана, чтобы форма больше не была полностью видимой.
Ответы
Ответ 1
Вы можете получить массив экранов, которые вы используете с этим кодом.
Screen[] screens = Screen.AllScreens;
Вы также можете выяснить, на каком экране вы находитесь, запустив этот код ( этот - это форма окна, в котором вы находитесь)
Screen screen = Screen.FromControl(this); //this is the Form class
вкратце проверьте класс Screen и статические вспомогательные методы, они могут вам помочь.
MSDN Link, не так много. Я предлагаю вам самостоятельно использовать код.
Ответ 2
Если вы помните расположение и размер окна, этого будет достаточно. Когда вы установите позицию на ранее использованную позицию, если она окажется на втором мониторе, она вернется туда.
Например, если у вас есть 2 монитора, размер 1280x1024 размером 1280x1024, и вы установите его левое положение на 2000px, оно появится на втором мониторе (если второй монитор находится справа от первого.):)
Если вы беспокоитесь о том, что второй монитор не будет там, когда приложение будет запущено в следующий раз, вы можете использовать этот метод, чтобы определить, пересекает ли ваше окно ни один из экранов:
private bool isWindowVisible(Rectangle rect)
{
foreach (Screen screen in Screen.AllScreens)
{
if (screen.Bounds.IntersectsWith(rect))
return true;
}
return false;
}
Просто пройдите в нужное вам окно, и он скажет вам, будет ли он виден на одном из экранов. Наслаждайтесь!
Ответ 3
Вы можете получить текущий экран с помощью
var s = Screen.FromControl(this);
где this
- это форма (или любое управление в форме). Как о том, как помнить, это немного сложно, но я бы пошел на индекс в массиве Screen.AllScreens или, возможно, на s.DeviceName. В любом случае проверьте перед использованием параметров при запуске, чтобы предотвратить использование отключенного монитора.
Ответ 4
Расположение формы сообщит вам, на каком экране находится форма. Я не понимаю, почему вам нужно знать, на каком экране он включен, потому что если вы восстановите его с помощью сохраненного вами местоположения, он должен просто восстановить его в том же месте (возможно, вы можете указать, почему).
В противном случае вы можете сделать что-то вроде этого:
Screen[] scr = Screen.AllScreens;
scr[i].Bounds.IntersectsWith(form.Bounds);
Каждый экран имеет свойство Bounds, которое возвращает Rectangle. Вы можете использовать функцию IntersectsWith(), чтобы определить, находится ли форма на экране.
Кроме того, они в основном предоставляют функцию, которая делает это также в классе Screen
Screen screen = Screen.FromControl(form);
Ответ 5
Вы можете использовать объект "Экран":
System.Windows.Forms.Screen
Начните играть с чего-то вроде этого:
Screen[] screens = Screen.AllScreens;
for (int i = 0; i < screens.Length ; i++)
{
Debug.Print(screens[i].Bounds.ToString());
Debug.Print(screens[i].DeviceName);
Debug.Print(screens[i].WorkingArea.ToString());
}
Он может получить то, что вам нужно