【发布时间】:2020-11-19 17:33:44
【问题描述】:
我有一个表单引用如下:
MainForm= Form1;
但是在同一个类的另一个方法中;在检测到该系统有超过 1 个监视器后:
int screens = Screen.AllScreens.Length;
if (screens > 1)
{
model.AddItem((CefMenuCommand)26504, "Switch Screen (Monitor)");
model.AddSeparator();
}
我需要在这些之间切换:
Screen[] lsScreen = Screen.AllScreens;
Screen myScreen = Screen.FromControl(MainForm);
if(myScreen == lsScreen[1])
{
MainForm.Location = lsScreen[0].WorkingArea.Location; // Primary Screen
MainForm.Top = MainForm.Left = 0;
MainForm.Width = lsScreen[0].WorkingArea.Width;
MainForm.Height = lsScreen[0].WorkingArea.Height;
}
else
{
MainForm.Location = lsScreen[1].WorkingArea.Location; // Secondary Screen
MainForm.Width = lsScreen[1].WorkingArea.Width;
MainForm.Height = lsScreen[1].WorkingArea.Height;
}
更新
这是 Visual Studio 2019 的展示:
-
部分正确;因为我可以将应用程序从主屏幕移动到辅助屏幕;问题是我无法从辅助屏幕移动到主屏幕(返回);在我看来,错误出现在最后一段代码中,我无法确定它是什么。
-
另一个限制是它只能在两个屏幕之间工作;初级和次级;如何调整我的代码以改进它,使其支持不确定数量的屏幕...
【问题讨论】:
-
需要心理调试。也许这个方法被多次调用,订阅事件时常见的错误。设置断点。
-
该方法只被调用一次。所以添加这行代码(CefMenuCommand)26504,“实际触发功能的切换屏幕(监视器)。
-
@HansPassant 我认为 IF 中的比较不够……
if(myScreen == lsScreen[1])
标签: c#