Обнаружение экрана 1 и экрана 2 открывается на экране 1 (только при отсутствии экрана) - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть следующий код:

namespace ExtendedDisplay{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    public static void ThreadProc(object arg)
    {
        Form2 form = arg as Form2;
        Application.Run(form);
    }

    int iWidth = 0;
    int iHeight = 0;

    private void button2_Click(object sender, EventArgs e)
    {

        Rectangle rect = new Rectangle(int.MaxValue, int.MaxValue, int.MinValue, int.MinValue);

        int iMonitorCount = Screen.AllScreens.Length;
        foreach (Screen screen in Screen.AllScreens)
            rect = Rectangle.Union(rect, screen.Bounds);
        Console.WriteLine("(width, height) = ({0}, {1})", rect.Width, rect.Height);
        label2.Text = ("Resolution: " + rect.Width + "x" + rect.Height);
        iWidth = rect.Width;
        iHeight = rect.Height;

    }
    [STAThread]
    private void button1_Click(object sender, EventArgs e)
    {
        Rectangle rect = new Rectangle(int.MaxValue, int.MaxValue, int.MinValue, int.MinValue);

        int iMonitorCount = Screen.AllScreens.Length;
        foreach (Screen screen in Screen.AllScreens)
            rect = Rectangle.Union(rect, screen.Bounds);

Form2 form = new Form2() { Text = "test" };

        Thread t = new Thread(ThreadProc);

        if (!Screen.AllScreens[1].Bounds.IsEmpty)
        {
            form.StartPosition = FormStartPosition.Manual;
            form.Bounds = Screen.AllScreens[1].Bounds;
            t.Start(form);
        }
        else 
        {

            t.Start(form);
        }

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

Пример:

, если(экран 1 не пустой и экран 0 не пустой)
отображать на экране 1
иначе, если (экран 0 не пустой)
отображать на экране 0

это если и еще, если
он будет работать только если

Это ошибка?

в настоящее время код
тогда и только только
однако только если можно запустить
если яне имеет экрана 1
он вылетит (таким образом еще не работает)

1 Ответ

0 голосов
/ 16 февраля 2019

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

    if (!Screen.AllScreens[1].Bounds.IsEmpty)
    {

Вы просто предполагаете, что у пользователя есть 2 экрана, ссылаясь на второй экран, не проверяя, есть ли в массиве Screen.AllScreens элемент [1] th.Почему бы не что-то более похожее на:

if(Screen.AllScreens.Length > 1) //does the user have at least 2 screens?

Я не могу представить, что Rectangle, то есть Screen.Bounds, тоже когда-нибудь будет пустым - это не проверка, если на экране ничего нет, это проверка, еслиЭкран размером 0x0 пикселей.Наверное, не то, что вы хотите.

https://docs.microsoft.com/en-us/dotnet/api/system.drawing.rectangle.isempty?view=netframework-4.7.2

Задайте еще один вопрос о фактической проблеме, которую вы пытаетесь решить, возможно, что-то вроде: «Как я могу проверить, есть ли у моего пользователя 2 монитора, и если они есть, откройте мойприложение на втором мониторе, но если нет, то откройте его на первом мониторе? "- Я думаю, что это проблема XY, когда у вас есть какая-то проблема, вы написали некоторый код, чтобы попытаться решить ее, она не работает / не будет работать, и вы просите помощи в исправлении этого кода- вместо этого скажите использовать исходную проблему, которую вы пытаетесь решить, а не проблему с неработающим решением

...