Как я удостоверяюсь, что форма отображается на “дополнительном” мониторе в сценарии парного монитора? [дубликат]

20
задан GEOCHET 2 June 2014 в 14:32
поделиться

2 ответа

Вам необходимо использовать класс Screen , чтобы найти экран что исходная форма не включена, затем установите свойство Location второй формы на основе Bounds этого экрана.

Например:

var myScreen = Screen.FromControl(originalForm);
var otherScreen = Screen.AllScreens.FirstOrDefault(s => !s.Equals(myScreen)) 
               ?? myScreen;
otherForm.Left = otherScreen.WorkingArea.Left + 120;
otherForm.Top = otherScreen.WorkingArea.Top + 120;

Это будет работать для любого количества экранов.

Обратите внимание, что возможно, что видеокарта настроена так, что Windows видит один большой экран вместо двух меньших, и в этом случае это становится намного сложнее.

42
ответ дан 29 November 2019 в 22:38
поделиться

Ниже приведена функция, позволяющая отображать форму на любом мониторе. Для вашего текущего сценария вы можете назвать это showOnMonitor (1); .

По сути, вам нужно получить информацию об экране из Screen.AllScreens , а затем получить размеры каждого из них, а затем разместить форму там, где она вам нужна.

function void showOnMonitor(int showOnMonitor) 
{ 
    Screen[] sc; 
    sc = Screen.AllScreens; 

    Form2 f = new Form2(); 

    f.FormBorderStyle = FormBorderStyle.None; 
    f.Left = sc[showOnMonitor].Bounds.Left; 
    f.Top = sc[showOnMonitor].Bounds.Top; 
    f.StartPosition = FormStartPosition.Manual; 

    f.Show(); 
}

Примечание: не забудьте выполнить проверку, чтобы убедиться, что вы на самом деле есть два экрана и т. д., иначе будет создано исключение для доступа к sc [showOnMonitor]

19
ответ дан 29 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: