问题
I want to show a new form in the same window from where it was invoked. I know a way to show this form on PrimaryScreen or Virtual Screen by code similar to as below:
MyForm.Location = Screen.PrimaryScreen.Bounds.Location;
But i want to show it on current screen. Is there a way to find out and show it on current screen?
回答1:
I have done something like this to show my form centered to the current screen:
var screen = Screen.FromPoint(Cursor.Position);
myForm.StartPosition = FormStartPosition.Manual;
myForm.Left = screen.Bounds.Left + screen.Bounds.Width / 2 - myForm.Width / 2;
myForm.Top = screen.Bounds.Top + screen.Bounds.Height / 2 - myForm.Height / 2;
回答2:
You can use the same technique, but instead of using the PrimaryScreen, grab the screen using Screen.FromPoint and Cursor.Position:
Screen screen = Screen.FromPoint(Cursor.Position);
MyForm.Location = screen.Bounds.Location;
回答3:
It sounds like you aren't setting the StartPosition to Manual.
回答4:
- Click on the Form in design mode.
- Change the StartPosition property to CenterScreen .
This should open up the form on the active screen. Refer this for more values of StartPosition.
回答5:
If you already have a parent form and want to open a new form on the same screen, give the ShowDialog method a reference to the parent form: newForm.ShowDialog(this);
Without owner parameter ("this
") the new form may open on the main screen even when your parent form is on another screen.
回答6:
I know this is late, but still, post my answer hope that it will help someone else. After several tries, I got this work with 3 monitors
var currentScreen = Screen.FromControl(this);
if (!currentScreen.Primary)
{
var hCenter = currentScreen.Bounds.Left + (((currentScreen.Bounds.Right - currentScreen.Bounds.Left) / 2) - ((Width) / 2));
var vCenter = (currentScreen.Bounds.Bottom / 2) - ((Height) / 2);
StartPosition = FormStartPosition.Manual;
Location = new Point(hCenter, vCenter);
}
else
{
CenterToScreen();
}
来源:https://stackoverflow.com/questions/3073852/how-to-show-a-form-on-current-screen-in-c