C# C从屏幕的顶部中心定位窗口
我有带此代码的Form3:C# C从屏幕的顶部中心定位窗口,c#,C#,我有带此代码的Form3: protected override void OnLoad(EventArgs e) { PlaceLowerRight(); base.OnLoad(e); } private void PlaceLowerRight() { //Determine "rightmost" screen Screen rightmost = Screen.AllScreens
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;
}
这将我的表格3放在右下角
我想把它放在我屏幕的顶部中间。它是否可以修改我的代码?如果没有,你能给我一个简单的解决方案吗
谢谢大家! 顶部为0,左侧为工作区宽度的一半减去控制宽度的一半
this.Left = (rightmost.WorkingArea.Right / 2) - (this.Width / 2);
this.Top = 0;
顶部为0,左侧为工作区宽度的一半减去控制宽度的一半
this.Left = (rightmost.WorkingArea.Right / 2) - (this.Width / 2);
this.Top = 0;
简单。为您提供一个描述整个图形的矩形。找到矩形的中心是一个简单的数学运算
因此:
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位于虚拟屏幕的顶部中心。这可能不是你想要的。如果用户有多个监视器,表单可能会跨越两个不同的监视器。为了解决这个问题,您需要更精确地定义表单的显示位置。您可以决定将其集中在用户设计为主屏幕的主屏幕上,或者您可以决定将其集中在当前显示的屏幕上,或者至少是当前包含其大部分区域的屏幕上。对于前者,可以使用Screen.PrimaryScreen.WorkingArea。对于后者,可以使用Screen.FromControlthis.WorkingArea.Simple。为您提供一个描述整个图形的矩形。找到矩形的中心是一个简单的数学运算
因此:
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位于虚拟屏幕的顶部中心。这可能不是你想要的。如果用户有多个监视器,表单可能会跨越两个不同的监视器。为了解决这个问题,您需要更精确地定义表单的显示位置。您可以决定将其集中在用户设计为主屏幕的主屏幕上,或者您可以决定将其集中在当前显示的屏幕上,或者至少是当前包含其大部分区域的屏幕上。对于前者,可以使用Screen.PrimaryScreen.WorkingArea。对于后者,可以使用Screen.FromControlthis.WorkingArea.,也可以将设计器中的StartPosition属性更改为CenterScreen
也可以将设计器中的StartPosition属性更改为CenterScreen
找到了一种更简单的方法
public Form1()
{
InitializeComponent();
Rectangle rcScreen = Screen.PrimaryScreen.WorkingArea;
this.Location = new System.Drawing.Point((rcScreen.Left + rcScreen.Right) / 2 - (this.Width / 2), 0);
}
找到了一种更简单的方法
public Form1()
{
InitializeComponent();
Rectangle rcScreen = Screen.PrimaryScreen.WorkingArea;
this.Location = new System.Drawing.Point((rcScreen.Left + rcScreen.Right) / 2 - (this.Width / 2), 0);
}
@BugFinder左上角为0,0。计算机通常不使用笛卡尔坐标。0,0实际上位于主屏幕的左侧,而不是整个虚拟屏幕的顶部。负坐标是可能的。@BugFinder左上角是0,0。计算机通常不使用笛卡尔坐标。0,0实际上位于主屏幕的左侧,而不是整个虚拟屏幕的顶部。负坐标是可能的。它在屏幕上垂直和水平居中。该问题询问屏幕的顶部中心。当然,您可以这样做,然后手动重置Top属性…谢谢Cody,更新了示例。我把它误读为屏幕上最顶端的形状,它在屏幕上垂直和水平居中。该问题询问屏幕的顶部中心。当然,您可以这样做,然后手动重置Top属性…谢谢Cody,更新了示例。我把它误读为屏幕上最上面的表格。