我有以下代码:
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
它将崩溃(因此无法正常工作)
答案 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问题,您遇到了一些问题,编写了一些代码来尝试解决该问题,它不起作用/不起作用,并且您正在寻求有关修复该代码的帮助-而是告诉您要解决的原始问题,而不要告诉解决方案破损的问题