2010-09-04 40 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事件中准确定位表单。不要设置客户端大小。

相关问题