如何将表单设置为屏幕中心?

时间:2012-12-21 22:50:49

标签: c#

我正在使用此代码:

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    this.Show();
    this.WindowState = FormWindowState.Normal;
    //this.Location = new Point(form1_location_on_x, form1_location_on_y);
    //this.StartPosition = FormStartPosition.CenterScreen;

this.Location = new Point(form1_location_on_x, form1_location_on_y);

this.StartPosition = FormStartPosition.CenterScreen;
当我使用原始屏幕分辨率1920x1080时,

正在工作,但是一旦我将分辨率更改为1024x768,表格就在右下角没有隐藏我看到了所有但是它不在中心。

form1_location_on_x和on_y是:

form1_location_on_x = this.Location.X;
form1_location_on_y = this.Location.Y;

问题是我该怎么做才能使其适用于1024x768等任何其他分辨率?我尝试了很多改变但到目前为止没有任何效果。

4 个答案:

答案 0 :(得分:4)

Size screenSize = Screen.PrimaryScreen.WorkingArea.Size;
Location = new Point(screenSize.Width / 2 - Width / 2, screenSize.Height / 2 - Height / 2);

确保您设置StartPosition = FormStartPosition.Manual;

经过测试并使用1920x1080和1024 x 768

答案 1 :(得分:2)

您可以使用以下公式计算表单的顶部和左侧位置:

int formWidth = yourForm.Width;
int formHeight = yourForm.Height;
int screenH = (Screen.PrimaryScreen.WorkingArea.Top + 
              Screen.PrimaryScreen.WorkingArea.Height) / 2;
int screenW = (Screen.PrimaryScreen.WorkingArea.Left + 
              Screen.PrimaryScreen.WorkingArea.Width) / 2;

int top = screenH - formWidth / 2;
int left = screenW - formHeight / 2;
yourForm.Location = new Point(top, left);

当然,现在,你有双显示器的问题 我不知道您是希望表单始终显示在主屏幕上,还是希望表单显示在当前屏幕(当前显示表单的那个屏幕)中。在第二种情况下,您需要找到表单的显示位置

private void CenterForm(Form yuorForm)
{    
    foreach(var s in Screen.AllScreens)
    {
       if(s.WorkingArea.Contains(yourForm.Location))
       {
            int screenH = s.WorkingArea.Height / 2;
            int screenW = s.WorkingArea.Width / 2;

            int top = (screenH + s.WorkingArea.Top) - formWidth / 2;
            int left = (screenW + s.WorkingArea.Left) - formHeight / 2;
            yourForm.Location = new Point(top, left);
            break;
       }
    }
}

编辑:感谢@alex,我将使用SystemEvents

的信息完成答案

如果您希望系统在用户突然更改屏幕分辨率时收到通知,您可以订阅活动SystemEvents.DisplaySettingsChanged(需要using Microsoft.Win32;

SystemEvents.DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySettingsChanged);  

然后在事件中处理表单的重新定位

// This method is called when the display settings change.
void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
    RecenterForm(yourForm);
}

答案 2 :(得分:1)

在调整大小后尝试使用其中一个:

this.CenterToScreen();

this.CenterToParent();

答案 3 :(得分:0)

您可以使用StartPosition个对象的Form 属性。它确定表单的位置。如果您希望表单在屏幕中央打开,请将其值设置为CenterScreen