正在检测屏幕1和屏幕2,在屏幕1上打开(仅当没有屏幕时)

时间:2019-02-16 03:31:15

标签: c# winforms screen

我有以下代码:

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

如果是,如果是
它只会在

这是一个错误吗?

当前代码为
如果只有,
但是只有if可以运行
如果我没有屏幕1
它将崩溃(因此无法正常工作)

1 个答案:

答案 0 :(得分:0)

该代码非常混乱,由于似乎多余,大多数代码都需要垃圾处理。问题行可能是:

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

您只是假定用户在此处具有2个屏幕,而是通过引用第二个屏幕而不检查Screen.AllScreens数组是否甚至具有第[1]个元素。为什么不这样:

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

我无法想象Rectangle的{​​{1}}也将是空的–这不是在测试屏幕上是否没有任何东西,而是在测试屏幕是否为0x0像素。可能不是您想要的。

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

问另一个与您要解决的实际问题有关的问题,例如:“如何测试我的用户是否有2台显示器,如果有,请在第二台显示器上打开我的应用程序,但如果没有, ,然后在第一台显示器上打开它?” -我认为这是一个XY问题,您遇到了一些问题,编写了一些代码来尝试解决该问题,它不起作用/不起作用,并且您正在寻求有关修复该代码的帮助-而是告诉您要解决的原始问题,而不要告诉解决方案破损的问题