Вам необходимо использовать класс 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 видит один большой экран вместо двух меньших, и в этом случае это становится намного сложнее.
Ниже приведена функция, позволяющая отображать форму на любом мониторе. Для вашего текущего сценария вы можете назвать это 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]