我正在使用此代码:
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等任何其他分辨率?我尝试了很多改变但到目前为止没有任何效果。
答案 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