Попробуйте это:
foreach(var screen in Screen.AllScreens)
{
if (screen.WorkingArea.Contains(this.Location))
{
var middle = (screen.WorkingArea.Bottom + screen.WorkingArea.Top) / 2;
Location = new System.Drawing.Point(Location.X, middle - Height / 2);
break;
}
}
Обратите внимание, что это не будет работать, если левый верхний угол не находится ни на одном из экранов, поэтому может быть лучше найти экран с наименьшим расстоянием от центра формы.
Редактировать
Если вы хотите отобразить на заданном экране, вы должны установить this.StartPosition = FormStartPosition.Manual;
Попробуйте использовать этот код:
System.Windows.Forms.Screen[] allScreens = System.Windows.Forms.Screen.AllScreens;
System.Windows.Forms.Screen myScreen = allScreens[0];
int screenId = RegistryManager.ScreenId;
if (screenId > 0)
{
myScreen = allScreens[screenId - 1];
}
Point centerOfScreen = new Point((myScreen.WorkingArea.Left + myScreen.WorkingArea.Right) / 2,
(myScreen.WorkingArea.Top + myScreen.WorkingArea.Bottom) / 2);
this.Location = new Point(centerOfScreen.X - this.Width / 2, centerOfScreen.Y - this.Height / 2);
this.StartPosition = FormStartPosition.Manual;