如何在每个使用桌面分辨率的右下角放置一个窗口(Winforms)
Posted
技术标签:
【中文标题】如何在每个使用桌面分辨率的右下角放置一个窗口(Winforms)【英文标题】:How to put a window on the right bottom corner on every using the desktop resolution (Winforms) 【发布时间】:2018-08-31 21:57:30 【问题描述】:我想获取右下角的位置,以便在 Winforms 中的托盘栏上方放置一个窗口,该窗口使用任何桌面分辨率位于同一位置。
我知道有 SystemParameters 可以为我提供最大高度和宽度,但我不知道如何让窗口进入右下角。
【问题讨论】:
【参考方案1】:将表单的StartPosition
设置为Manual
,然后设置(在设计器中),然后加载 (this.Load += new System.EventHandler(this.Form_Load);
) em> 将 this.Left
和 this.Top
设置为请求的值。 (Left = 0
主屏幕左侧,Top
值根据屏幕分辨率、窗口大小计算 (this.Size
))
示例代码(您的代码):
private void Form_Load(object sender, EventArgs e)
Rectangle workingArea = Screen.PrimaryScreen.WorkingArea;
// use 'Screen.AllScreens[1].WorkingArea' for secondary screen
this.Left = workingArea.Left + workingArea.Width - this.Size.Width;
this.Top = workingArea.Top + workingArea.Height - this.Size.Height;
(来自设计师;Form.Designer.cs)
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "Form title";
this.Load += new System.EventHandler(this.Form_Load);
【讨论】:
计算部分对我来说是最重要的部分,因为我希望窗口的位置直接位于托盘栏上方,并且 X 和 Y 开始(/0 是)在左上角而不是右下角/下角。 抱歉,我没有 C# 代码来获取当前显示工作区。这部分是简单的部分。当前显示的工作区是我很久以前用 C++ 编写的。我手头没有代码,因此您需要自己弄清楚,例如***.com/questions/1317235/c-get-complete-desktop-size 或 msdn.microsoft.com/en-us/library/… @Quantum :答案已更新。在 C# 中似乎比在 C++ 中更简单(可能是因为我只使用了一个主屏幕而忽略了应用程序启动屏幕)。但不要忘记,此应用程序将窗口移动到右下角而不是托盘栏。 对于主屏幕在标准配置中它应该为零(应该是主屏幕的左上角)。但是当用户将任务栏设置为左侧时,工作区可能从不同于 0(左侧)的位置开始。 我自己找到了一个好方法,但感谢您的帮助。你的 .Left 和 .Top-Ideas 帮助了我 :)以上是关于如何在每个使用桌面分辨率的右下角放置一个窗口(Winforms)的主要内容,如果未能解决你的问题,请参考以下文章
更改分辨率时如何保留其他应用程序窗口的大小和位置? (例如,以非桌面分辨率来回全屏游戏)