c# - 设置 Cursor.Position "half"- 有效(从一台显示器到另一台显示器)

标签 c# .net winforms

我有两个显示器,非主显示器(1 号)设置为主显示器(2 号)左上角,如这个:

enter image description here

我再说一遍:2 号 是主要监视器。

代码如下:

Cursor.Position = new Point(-500, -500);

发生的情况是,当光标最初位于主监视器(编号 2)时,执行代码后,光标移动到监视器 编号 1,以从底部向上 500 像素但最右边的位置。这里:

enter image description here

而不是这里:

enter image description here

运行上面的代码两次后,像这样:

Cursor.Position = new Point(-500, -500);
Cursor.Position = new Point(-500, -500);

它到达了正确的位置。

问题是这段代码看起来像 hack,我想避免它,并以“正确”的方式将光标移到正确的位置。

那么我该如何实现呢?

最佳答案

当您有多个屏幕时,您必须注意每个屏幕的边界 C# 提供了一个屏幕数组,您可以遍历该数组以获取有关屏幕坐标的更多信息,即 Screen.AllScreens

enter image description here

请看下图,它表明只有主屏幕从 2D(X,Y) 平面中的 X:0 和 Y:0 开始,我们可以在任何地方调整第二屏幕,在我的例子中它有位置 (-1366,305 ) 如图所示。和不同点ar enter image description here 每个屏幕都有其从左到右和从上到下的界限。您可以使用该边界到达代码中所示的确切位置,如果我将其边界值添加到点,我可以移动到任何屏幕的任何点。

   //To move on First Screen use its Bounds
    Cursor.Position = new Point(300 + Screen.AllScreens[0].Bounds.Left, 300 + Screen.AllScreens[0].Bounds.Top);
    
    //To move on Second Screen use its Bounds
    Cursor.Position = new Point(300 + Screen.AllScreens[1].Bounds.Left, 300 + Screen.AllScreens[1].Bounds.Top);

关于c# - 设置 Cursor.Position "half"- 有效(从一台显示器到另一台显示器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71578927/

相关文章:

c# - 连接字符串中下划线后的数据库名称被忽略

c# - WCF 客户端/服务器配置不匹配

c# - 一键插入,更新,删除数据库

sql - 查找 VB.net 应用程序中使用的表以删除未使用的表

c# - 错误 : LINQ to Entities does not recognize the method DataLength

c# - 将 char 与 int 和 string 连接起来会产生奇怪的结果

c# - 是否可以在不知道任何一种类型的情况下将一个对象转换为第二个对象的类型?

c# - 进程退出后如何启用表单按钮?

c# - 为什么当计时器倒计时时它从不在秒上显示 0?

c# - 复制流的最后 16 个字节以外的所有字节?流结束的早期检测?