2010-07-09 42 views
6

我只是想知道是否有可能停靠在用戶屏幕頂部的窗體?我一直在試圖通過手動將我的表單的位置設置爲我想要的座標來完成此操作。但是,使用這種方法可以讓用戶通過拖動來改變表單的位置。我想將窗體停靠在屏幕的上部,因爲此窗體將作爲我正在製作的項目的菜單服務器。如何在C#中停靠窗體?

非常感謝。 :)

回答

1

所以經過一些調整,我終於能夠得到這個代碼的工作。

this.DesktopLocation = new Point((Screen.PrimaryScreen.Bounds.Width/2 - 420), 0); 

我把該行的InitializeComponent()和它下面的對接形式,我用什麼分辨率值在屏幕的中央。

3

我會考慮使用Control.Dock屬性以及其中一個DockStyle枚舉值。

您也可能需要使用Layout,以便您可以根據所選的DockStyle以不同方式佈置窗體的控件。

在我看來,您需要考慮Control.Location屬性,以便您瞭解使用哪個DockStyle值停靠您的表單。

編輯#1

你的Windows窗體有Dock性質,因爲它從Control繼承。

讓我們考慮以下幾點:

  1. 每次表單更接近屏幕的右側,例如,或者MDI容器,你要停靠權,對不對? (小字在這裏播放...... = P)所以,你必須訂閱Control.LocationChanged事件。

    private void myForm_LocationChanged(object sender, EventArgs e) { 
        if (this.Location.X > 900) then 
         this.Dock = DockStyle.Right; 
        else if (this.Location.X < 150) then 
         this.Dock = DockStyle.Left; 
        else if (this.Location.Y > 600) then 
         this.Dock = DockStyle.Bottom; 
        else if (this.Location.Y < 150) then 
         this.Dock = DockStyle.Top; 
        else 
         this.Dock = DockStyle.None; 
    } 
    

事實上,而非固定值,你應該使用當前的桌面分辨率,並計算出它要發生的對接的比率。

***免責聲明:****此代碼按原樣提供,尚未經過測試。該算法足以指導您在需要時通過對接過程。 * =)

看起來Form.DesktopLocation屬性是比較主要的窗口,也就是說你的MDI容器,比較適合工作。至於其他窗口,我會配合看起來像代碼示例提供的東西。

這有幫助嗎?

編輯#2

如果你想防止窗體的重疊,也許Control.BringToFront()方法可能之前或你的電話到Control.Show()方法後做,這取決於什麼最適合你。

+0

您好,感謝您的答覆。我對使用Visual Studio 2008的擴展功能有點新,我完全不知道如何使用Control.Dock屬性。你可以給我一些關於如何使用這些屬性的例子嗎?謝謝:) – Smiley 2010-07-09 16:22:36

+0

這是爲了在窗體內停靠控件,而不是停靠整個窗體。 – 2010-07-09 20:59:16

+0

@Jouke Van Der Maas:我想你沒有看完我的答案。我提到'DesktopLocation'屬性,也就是說,用於將整個窗口停靠在桌面上。此外,我建議,在OP精簡他的想法之後,這可能是更好的工具。請相應修改您的評論。 – 2010-07-09 23:40:10

0

通過將您的表單的FormBorderStyle設置爲None,您可以將拖動手柄從用戶身上移開,以免它們通過鼠標移動。

然後你只需要把它放在你想要的地方。

如果你真的想帶走用戶的選項,你還可以設置ShowInTaskbar屬性設置爲false