2010-09-04 42 views
5

我想在系統托盤正上方的右下角顯示一個winform,在通知區域顯示一個winform

我該怎麼做?這裏是我的代碼:

public static void Notify() 
{   
    Rectangle workingArea = Screen.PrimaryScreen.WorkingArea; 
    Form fm = new Form(); 
    fm.ClientSize = new Size(200, 200); 
    int left = workingArea.Width - fm.Width; 
    int top = workingArea.Height - fm.Height; 
    fm.Location = new Point(left, top); 
    fm.ShowInTaskbar = false; 
    fm.ShowIcon = false; 
    fm.MinimizeBox = false; 
    fm.MaximizeBox = false; 
    fm.FormBorderStyle = FormBorderStyle.FixedToolWindow; 
    fm.Text = "Test"; 
    fm.TopMost = true; 
    fm.Show(); 
} 

回答

8

我只是想這和它的工作對我來說(:此代碼必須出現後的形式被顯示了在第一時間 - 例如,你可以把它放在窗體的Load事件處理程序,或者乾脆包括它的任何調用Show)後:

Rectangle workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea; 
int left = workingArea.Width - this.Width; 
int top = workingArea.Height - this.Height; 

this.Location = new Point(left, top); 

是否使用WorkingAreaBounds取決於「over」的意思:如果您的意思是「在...之前」,則使用Bounds,因爲它包括覆蓋整個屏幕的區域(包括系統托盤佔用的空間);如果你的意思是「以上」,那麼使用WorkingArea,它只包括用戶的桌面。

另外,讓我只是澄清,你希望你的實際表格顯示在那裏,對嗎?如果您想在通知區域顯示一個圖標,那麼這是NotifyIcon組件的用途。

+0

謝謝,我只是更新了我的代碼,並且它不工作! – 2010-09-04 23:37:05

+0

@ Data-Base:在調用Show之後,將設置表單位置的行移動到*。 Windows窗體做了一件奇怪的事情,它在第一次顯示窗體之前設置「位置」屬性時似乎忽略了你。 – 2010-09-04 23:44:47

+2

我剛用過fm.StartPosition = FormStartPosition.Manual; Hans Passant的代碼,它的工作原理:-) – 2010-09-05 10:58:57

4

如果你想定位在任務欄/盈形式:

設置形式TopMost屬性爲true。您可以使用Screen.PrimaryScreen.Bounds來獲得屏幕分辨率,然後適當地設置您的表格位置。


如果你只是想要放置的形式只是在底部的任務欄上右那麼你可以做如下:

在窗體設計器,轉到屬性 - >事件和Load事件添加到你的形式。

添加以下內容:

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.StartPosition = FormStartPosition.Manual; 
    int x = Screen.PrimaryScreen.WorkingArea.Width - this.Width; 
    int y = Screen.PrimaryScreen.WorkingArea.Height - this.Height; 
    this.Bounds = new Rectangle(x, y, this.Width, this.Height); 
} 
+0

我認爲OP的意思是「over」,如「上面」,而不是「上面的」;所以'TopMost'不適合。雖然我可能是錯的。 – 2010-09-04 23:24:17

+0

真的那..現在他有選擇:) – hydrogen 2010-09-04 23:25:14

+0

感謝分配,現在我解決了我的問題:-) – 2010-09-04 23:41:43

5

你忘了這一個:

 fm.StartPosition = FormStartPosition.Manual; 

什麼,你必須要繼續對下一個是放任務欄上,也就是說,在屏幕的左側,具有視頻的機器上運行的代碼DPI設置爲不同的值(如125)。您只能在其Load事件中準確定位表單。不要設置客戶端大小。

相關問題