2016-07-05 55 views
1

我Form3與此代碼:C#找到畫面的窗口形式的頂部中央

protected override void OnLoad(EventArgs e) 
    { 
     PlaceLowerRight(); 
     base.OnLoad(e); 
    } 

    private void PlaceLowerRight() 
    { 
     //Determine "rightmost" screen 
     Screen rightmost = Screen.AllScreens[0]; 
     foreach (Screen screen in Screen.AllScreens) 
     { 
      if (screen.WorkingArea.Right > rightmost.WorkingArea.Right) 
       rightmost = screen; 
     } 

     this.Left = rightmost.WorkingArea.Right - this.Width; 
     this.Top = rightmost.WorkingArea.Bottom - this.Height; 
    } 

這讓我Form3在右下像

Esempio

我希望它的我的屏幕頂部中心。它可以適應我的代碼或不?如果不是,你能否爲我提供一個簡單的解決方案?

謝謝!

+0

@BugFinder左上角是0,0。計算機通常不能使用笛卡兒座標。 –

+0

(0,0)實際上是(*,主屏幕*的左側,頂部),而不是整個虛擬屏幕。負座標是可能的。 –

回答

2

Top將爲0,而Left將爲工作區域寬度的一半減去控制寬度的一半。

this.Left = (rightmost.WorkingArea.Right/2) - (this.Width/2); 
this.Top = 0; 
2

簡單。 Screen.WorkingArea爲您提供了一個描述整個virtual screen的矩形。找到矩形的中心是一個簡單的數學運算。

因此:

private void PlaceInTopCenter() 
{ 
    Rectangle rcScreen = Screen.WorkingArea; 
    Rectangle rcForm = new Rectangle(this.Width, this.Height); 
    this.Position = new Point((rcScreen.Left + rcScreen.Right)/2 - (rcForm.Width/2), 0); 
} 

注意,這將會把形式嫌-DAB在虛擬屏幕的頂部中心。這可能不是你想要的。如果用戶有多個顯示器,表格可能會跨越兩個不同的顯示器。爲了解決這個問題,你需要更精確地定義你希望顯示錶單的位置。你可能會決定你希望它在主屏幕(用戶設計爲「主」的那個屏幕)上居中,或者你可能會認爲你希望它在當前顯示的屏幕上居中(或者至少,目前包含屏幕的屏幕最多,其面積爲)。對於前者,您可以使用Screen.PrimaryScreen.WorkingArea。對於後者,您可以使用Screen.FromControl(this).WorkingArea

0

或者您可以將設計器中的StartPosition屬性更改爲CenterScreen

this.StartPosition = FormStartPosition.CenterScreen; 
this.Top = 0; 
+0

它在屏幕中垂直和水平居中。該問題詢問了屏幕的「頂部中心」。當然,你可以這樣做,然後手動重置'Top'屬性... –

+0

謝謝科迪,更新了這個例子。我誤以爲它是屏幕上最頂級的形式。 – Slai

0

找到一個稍微簡單的方法來做到這一點。

public Form1() 
    { 
     InitializeComponent(); 

     Rectangle rcScreen = Screen.PrimaryScreen.WorkingArea; 
     this.Location = new System.Drawing.Point((rcScreen.Left + rcScreen.Right)/2 - (this.Width/2), 0); 

    }