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

def insenStringCompare(s1, s2):
    """ Method that takes two strings and returns True or False, based
        on if they are equal, regardless of case."""
    try:
        return s1.lower() == s2.lower()
    except AttributeError:
        print "Please only pass strings into this method."
        print "You passed a %s and %s" % (s1.__class__, s2.__class__)
44
задан Dour High Arch 13 July 2009 в 20:21
поделиться

5 ответов

Вы можете получить массив экранов, которые у вас есть, используя этот код.

Screen[] screens = Screen.AllScreens;

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

Screen screen = Screen.FromControl(this); //this is the Form class

вкратце ознакомьтесь с классом Screen и статическими вспомогательными методами, они могут вам помочь.

Ссылка MSDN , не имеет особого смысла .. Я предлагаю возиться с код самостоятельно.

57
ответ дан 26 November 2019 в 22:08
поделиться

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

Например, если у вас есть 2 монитора, оба размером 1280x1024, и вы устанавливаете левое положение вашего окна на 2000 пикселей, он появится на втором мониторе (при условии, что второй монитор находится справа от первого.):)

Если вас беспокоит, что второго монитора не будет, когда приложение запускается в следующий раз, вы можете используйте этот метод, чтобы определить, пересекает ли ваше окно какой-либо из экранов:

private bool isWindowVisible(Rectangle rect)
{
    foreach (Screen screen in Screen.AllScreens)
    {
        if (screen.Bounds.IntersectsWith(rect))
            return true;
    }
    return false;
}

Просто перейдите в желаемое место вашего окна, и он сообщит вам, будет ли оно видимым на одном из экранов. Наслаждайтесь!

9
ответ дан 26 November 2019 в 22:08
поделиться

Вы можете получить текущий экран с помощью

var s = Screen.FromControl(this);

, где , это - форма (или любой элемент управления в форме). Что касается того, как запомнить, это немного сложно, но я бы выбрал индекс в массиве Screen.AllScreens или, может быть, s.DeviceName. В любом случае проверьте перед использованием настроек при запуске, чтобы предотвратить использование монитора, который был отключен.

6
ответ дан 26 November 2019 в 22:08
поделиться

Местоположение формы укажет вам, на каком экране она находится. Я действительно не понимаю, почему вам нужно знать, на каком экране он находится, потому что, если вы восстановите его, используя сохраненное место, оно должно просто восстановиться в том же месте (возможно, вы сможете подробнее объяснить, почему).

В противном случае вы можете сделать что-то вроде этого:

Screen[] scr = Screen.AllScreens;
scr[i].Bounds.IntersectsWith(form.Bounds);

Каждый экран имеет свойство Bounds, которое возвращает прямоугольник. Вы можете использовать функцию IntersectsWith (), чтобы определить, находится ли форма внутри экрана.

Кроме того, они в основном предоставляют функцию, которая делает это также в классе Screen

Screen screen = Screen.FromControl(form);
4
ответ дан 26 November 2019 в 22:08
поделиться

Вы можете использовать объект «Экран»: 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());
        }

Это может дать вам то, что вам нужно

1
ответ дан 26 November 2019 в 22:08
поделиться