我有这个代码的Form3:
protected override void OnLoad(EventArgs e)
{
PlaceLowerRight();
base.OnLoad(e);
}
private void PlaceLowerRight()
{
//Determine "rightmost" screen
Screen rightmost = Screen.AllScreens[0];
foreach (Screen screen in Screen.AllScreens)
{
if (screen.WorkingArea.Right > rightmost.WorkingArea.Right)
rightmost = screen;
}
this.Left = rightmost.WorkingArea.Right - this.Width;
this.Top = rightmost.WorkingArea.Bottom - this.Height;
}
这将我的Form3放在右下角,如
我想把它放到屏幕的顶部中心。它可以适应我的代码吗?如果没有,你能为我提供一个简单的解决方案吗?
谢谢!
答案 0 :(得分:2)
<p>{{ global_var }}</p>
为0,Top
为工作区宽度的一半减去控制宽度的一半。
Left
答案 1 :(得分:2)
简单。 Screen.WorkingArea
为您提供了一个描述整个virtual screen的矩形。找到矩形的中心是一个简单的数学运算。
因此:
private void PlaceInTopCenter()
{
Rectangle rcScreen = Screen.WorkingArea;
Rectangle rcForm = new Rectangle(this.Width, this.Height);
this.Position = new Point((rcScreen.Left + rcScreen.Right) / 2 - (rcForm.Width / 2), 0);
}
请注意,这会将表单smack-dab放在虚拟屏幕的顶部中心。这可能不是你想要的。如果用户有多个监视器,表单可能最终跨越两个不同的监视器。要解决该问题,您需要更精确地定义表单的显示位置。您可能决定希望它以主屏幕为中心(用户设计为&#34;主要&#34;),或者您可能决定将其置于当前显示的屏幕中心on(或至少是当前包含其区域的屏幕)。对于前者,您将使用Screen.PrimaryScreen.WorkingArea
。对于后者,您将使用Screen.FromControl(this).WorkingArea
。
答案 2 :(得分:0)
或者您只需将设计器中的StartPosition
属性更改为CenterScreen
。
this.StartPosition = FormStartPosition.CenterScreen;
this.Top = 0;
答案 3 :(得分:0)
找到一种稍微简单的方法。
public Form1()
{
InitializeComponent();
Rectangle rcScreen = Screen.PrimaryScreen.WorkingArea;
this.Location = new System.Drawing.Point((rcScreen.Left + rcScreen.Right) / 2 - (this.Width / 2), 0);
}