我的Windows窗体应用程序有很多窗体,它们经常被打开和关闭,我需要窗体总是在启动窗体当前所在的显示器上打开(在Application.Run()中指定的形式)。这就是我的应用程序的一贯行为,但自从从VS19迁移到VS22后,我无法再次获得相同的行为。我应该使用什么StartPosition或任何其他设置来实现这一点?
8i9zcol21#
找到了解决方案!这使得您当前正在打开的表单,在初始启动表单当前所在的同一显示屏上打开,并将其居中到该表单。本质上,它是手动创建CenterParent StartPosition,而无需处理Parents/Children。下面是我打开主菜单表单的代码:
form = new MainMenu(); form.Location = Program.getStartFormPoint(form.Width, form.Height); form.StartPosition = FormStartPosition.Manual; form.Show();
中间的两行是我为这个解决方案添加的。下面将是getStartFormPoint函数,在这个例子中我放置在我的Program.cs中。LoginScreen/loginForm是我在这个应用程序中的初始启动表单。与Application中使用的表单相同。在Main()下运行。
public static Point getStartFormPoint(int width, int height) { var loginForm = Application.OpenForms.OfType<LoginScreen>().FirstOrDefault(); Point thePoint = new Point((loginForm.Location.X + loginForm.Width / 2) - (width / 2), (loginForm.Location.Y + loginForm.Height / 2) - (height / 2)); return (thePoint); }
1条答案
按热度按时间8i9zcol21#
找到了解决方案!这使得您当前正在打开的表单,在初始启动表单当前所在的同一显示屏上打开,并将其居中到该表单。本质上,它是手动创建CenterParent StartPosition,而无需处理Parents/Children。
下面是我打开主菜单表单的代码:
中间的两行是我为这个解决方案添加的。下面将是getStartFormPoint函数,在这个例子中我放置在我的Program.cs中。LoginScreen/loginForm是我在这个应用程序中的初始启动表单。与Application中使用的表单相同。在Main()下运行。