Подтвердить что ты не робот

Как определить, на каком мониторе работает моя программа .NET Windows Forms?

У меня есть приложение С# Windows, которое я хочу обеспечить, будет отображаться на втором мониторе, если пользователь переместит его на один. Мне нужно сохранить размер основной формы, местоположение и состояние окна, которые я уже обработал, но мне также нужно знать, на каком экране он был включен, когда пользователь закрыл приложение.

Я использую класс Screen для определения размера текущего экрана, но я не могу найти ничего о том, как определить, на каком экране было запущено приложение.

Изменить: Спасибо за ответы, всем! Я хотел бы определить, на каком мониторе было окно, чтобы я мог выполнить правильную проверку границ, если пользователь случайно вывел окно за пределы области просмотра или изменил размер экрана, чтобы форма больше не была полностью видимой.

4b9b3361

Ответ 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());
        }

Он может получить то, что вам нужно