Как обеспечить отображение формы на" дополнительном " мониторе в сценарии с двумя мониторами? [дубликат]
На этот вопрос уже есть ответ здесь:
У меня есть приложение, в котором есть форма, которую я хочу показать на втором экране.
Означает, что если приложение запущено на экране A и когда я нажимаю на меню, чтобы показать форму, она должна отображаться на экране B и то же самое с приложением if работает на экране B, и когда я нажимаю на меню, чтобы показать форму, она должна отображаться на экране A.
4 ответа:
Вам необходимо использовать
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]
В методе OnLoad измените расположение окна.
protected void Form1_OnLoad(...) { showOnMonitor(1); } private void showOnMonitor(int showOnMonitor) { Screen[] sc; sc = Screen.AllScreens; if (showOnMonitor >= sc.Length) { showOnMonitor = 0; } this.StartPosition = FormStartPosition.Manual; this.Location = new Point(sc[showOnMonitor].Bounds.Left, sc[showOnMonitor].Bounds.Top); // If you intend the form to be maximized, change it to normal then maximized. this.WindowState = FormWindowState.Normal; this.WindowState = FormWindowState.Maximized; }
Я использовал это для двухэкранного приложения XNA 4 (полноэкранное игровое окно XNA + WinForm)
В метод Form_Load() поместите следующий код:
var primaryDisplay = Screen.AllScreens.ElementAtOrDefault(0); var extendedDisplay = Screen.AllScreens.FirstOrDefault(s => s != primaryDisplay) ?? primaryDisplay; this.Left = extendedDisplay.WorkingArea.Left + (extendedDisplay.Bounds.Size.Width / 2) - (this.Size.Width / 2); this.Top = extendedDisplay.WorkingArea.Top + (extendedDisplay.Bounds.Size.Height / 2) - (this.Size.Height / 2);