C#找到窗口顶部中心的窗口

时间:2016-07-05 12:20:53

标签: c#

我有这个代码的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放在右下角,如

Esempio

我想把它放到屏幕的顶部中心。它可以适应我的代码吗?如果没有,你能为我提供一个简单的解决方案吗?

谢谢!

4 个答案:

答案 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);

    }