Переместить форму на указанный экран - PullRequest
7 голосов
/ 07 декабря 2011

Я пытаюсь выяснить, как переместить указанный System.Windows.Forms.Form на другой, чем основной экран.У меня есть ComboBox со списком доступных экранов, где пользователь выбирает любой экран, который ему нравится, и мое приложение должно переместить одно из его окон на этот экран.

У меня только один экран на ноутбуке и нет внешнего монитора,ComboBox на моем компьютере предлагает только один вариант.Я думаю, минимизация желаемого окна, перемещение его левого угла в центр границ выбранного экрана и максимизация сделают эту работу, верно?Я просто не могу это проверить.Это хороший путь?

Заранее спасибо!

1 Ответ

7 голосов
/ 07 декабря 2011

Вот что я сделал, как простой тест ...

Я добавил простой класс-обертку, чтобы я мог изменить то, что происходит при вызове 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;
}

Он переместил форму в верхний левый угол каждого из моих экранов.

...