2011-12-07 12 views
5

Próbuję dowiedzieć się, jak przenieść określone System.Windows.Forms.Form na inny niż podstawowy ekran. Mam ComboBox z listą dostępnych ekranów, gdzie użytkownik wybiera dowolny ekran, który mu się podoba, a moja aplikacja ma przenieść jedno ze swoich okien na ten ekran.Przenoszenie formularza na określony ekran

Mam tylko jeden ekran na moim laptopie i nie ma monitora zewnętrznego, więc ComboBox na moim komputerze oferuje tylko jedną opcję. Sądzę, że minimalizacja pożądanego okna, przesunięcie jego lewego narożnika w środku wybranego obszaru ekranu i maksymalizacja pozwolą na wykonanie zadania, prawda? Po prostu nie mogę tego przetestować. Czy to dobry sposób na odejście?

Z góry dzięki!

+0

Możliwy duplikat: http://stackoverflow.com/questions/2561104/c-sharp-winform-show-form-in-se –

+0

Potrzebujesz monitora i przetestuj go. Nie możesz obsłużyć kodu, którego sam nigdy nie zweryfikowałeś. –

Odpowiedz

5

Oto co ja, jako prostego testu ...

Dodałem prostą klasę otoki, abym mógł zmienić to, co dzieje się na wezwanie toString (Chciałem tylko zobaczyć nazwę podaną w polu kombi)

private class ScreenObj 
{ 
    public Screen screen = null; 

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

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

W przypadku obciążenia forma dodałem to:

foreach(Screen screen in Screen.AllScreens) 
{ 
    cboScreens.Items.Add(new ScreenObj(screen)); 
} 

A dla wybranego zdarzenia zmiany indeksu pola kombi miałem to:

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; 
} 

Przesunął formularz do lewego górnego rogu każdego z moich ekranów.

+1

dziękuję. to jest dokładnie to, czego potrzebowałem. –

+0

@ pennyrave, Czy ten kod działa, jeśli używam portu hdmi? –