2011-12-07 21 views
5

我想弄清楚如何將指定的System.Windows.Forms.Form移動到另一個主屏幕上。我有ComboBox的可用屏幕列表,用戶可以選擇他喜歡的任何一個屏幕,我的應用程序應該將其中一個窗口移動到該屏幕上。移動到指定屏幕上的表格

我的筆記本電腦上只有一個屏幕,沒有外接顯示器,所以我的電腦上的ComboBox只提供一個選項。我認爲最小化期望的窗口,將它移動到所選屏幕邊界的中心左邊角落並做出最大化的工作,對吧?我無法測試它。這是一個好方法嗎?

在此先感謝!

+0

可能的重複:http://stackoverflow.com/questions/2561104/c-sharp-winform-show-form-in-se –

+0

您需要獲取監視器並對其進行測試。您無法支持您從未驗證過的代碼。 –

回答

5

下面是我做什麼,作爲一個簡單的測試......

我添加了一個簡單的包裝類,這樣我就可以改變在通話的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; 
} 

它將窗體移動到每個屏幕的左上角。

+1

謝謝。這正是我需要的。 –

+0

@ pennyrave,如果我使用hdmi端口,此代碼是否工作? –