将窗体移动到指定的屏幕

8
我正在尝试找出如何将指定的 System.Windows.Forms.Form 移动到非主屏幕。我有一个下拉框,其中列出了可用的屏幕列表,用户可以选择他喜欢的屏幕,我的应用程序应该将其窗口移动到该屏幕上。
我在笔记本电脑上只有一个屏幕,没有外部监视器,所以我的计算机上的 ComboBox 只提供一个选项。我认为将所需窗口最小化,将其左上角移动到所选屏幕的 Bounds 中心并最大化即可完成工作,对吗?我只是无法测试它。这是一个好方法吗?
谢谢!

可能是重复的问题:https://dev59.com/qXE85IYBdhLWcg3w43wX - John Arlen
1
你需要获取监视器并对其进行测试。你不能支持你从未验证过的代码。 - Security Hound
1个回答

8

以下是我的简单测试方法...

我添加了一个简单的包装类,以便在ToString调用时更改发生的内容(我只想在组合框中看到名称列表)。

private class ScreenObj
{
    public Screen screen = null;

    public ScreenObj(Screen scr)
    {
        screen = scr;
    }

    public override string ToString()
    {
        return screen.DeviceName;
    }
}

在表单加载事件中,我添加了以下内容:
foreach(Screen screen in Screen.AllScreens)
{
     cboScreens.Items.Add(new ScreenObj(screen));
}

对于组合框的选定索引更改事件,我有以下内容:

private void cboScreens_SelectedIndexChanged(object sender, EventArgs e)
{
    object o = cboScreens.SelectedItem;
    if(null == o)
        return;

    ScreenObj scrObj = o as ScreenObj;
    if(null == scrObj)
        return;

    Point p = new Point();

    p.X = scrObj.screen.WorkingArea.Left;
    p.Y = scrObj.screen.WorkingArea.Top;

    this.Location = p;
}

它将表单移动到了我屏幕的左上角。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接