我想在系统托盘正上方的右下角显示一个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();
}
答案 0 :(得分: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);
是否使用WorkingArea
或Bounds
取决于“over”的含义:如果您的意思是“在...之前”,则使用Bounds
,因为它包含覆盖的区域整个屏幕(包括系统托盘占用的空间);如果您的意思是“在上面”,那么请使用WorkingArea
,其中只包含用户的桌面。
另外,请允许我澄清您希望在那里显示您的实际表单,对吗?如果您想在通知区域中显示一个图标,那就是NotifyIcon
组件的用途。
答案 1 :(得分:5)
你忘了这一个:
fm.StartPosition = FormStartPosition.Manual;
接下来要做的就是将任务栏放在屏幕的左侧,然后在视频DPI设置为不同值(如125)的计算机上运行代码。您只能在Load事件中准确定位表单。不要设置客户端大小。
答案 2 :(得分:4)
如果您想将表单放在任务栏上/前面:
将表单TopMost属性设置为true。您可以使用Screen.PrimaryScreen.Bounds获取屏幕分辨率,然后适当地设置表单位置。
如果您只想将表单放在右下角的任务栏上方,那么您可以执行以下操作:
在表单设计器中,转到Properties-> Events并将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);
}