Dav*_*son 34 c# multiple-monitors winforms setbounds
我正在尝试在辅助监视器上设置Windows窗体,如下所示:
private void button1_Click(object sender, EventArgs e)
{
MatrixView n = new MatrixView();
Screen[] screens = Screen.AllScreens;
setFormLocation(n, screens[1]);
n.Show();
}
private void setFormLocation(Form form, Screen screen)
{
// first method
Rectangle bounds = screen.Bounds;
form.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height);
// second method
//Point location = screen.Bounds.Location;
//Size size = screen.Bounds.Size;
//form.Left = location.X;
//form.Top = location.Y;
//form.Width = size.Width;
//form.Height = size.Height;
}
Run Code Online (Sandbox Code Playgroud)
边界的属性似乎是正确的,但在我尝试的两种方法中,这最大化了主监视器上的表单.有任何想法吗?
小智 45
this.Location = Screen.AllScreens[1].WorkingArea.Location;
Run Code Online (Sandbox Code Playgroud)
这是表单引用.
Ses*_*esh 30
尝试在SetFormLocation方法中将WindowStartUpLocation参数设置为"manual".
Ale*_*and 10
@Gengi的答案很简洁,效果很好.如果窗口最大化,则不会移动窗口.这个片段解决了这个问题(虽然我怀疑窗口"正常"尺寸必须小于新屏幕尺寸才能工作):
void showOnScreen(int screenNumber)
{
Screen[] screens = Screen.AllScreens;
if (screenNumber >= 0 && screenNumber < screens.Length)
{
bool maximised = false;
if (WindowState == FormWindowState.Maximized)
{
WindowState = FormWindowState.Normal;
maximised = true;
}
Location = screens[screenNumber].WorkingArea.Location;
if (maximised)
{
WindowState = FormWindowState.Maximized;
}
}
}
Run Code Online (Sandbox Code Playgroud)