Unable to position form to center
I have a form called Form1. Its set to startup-Position = Center but when executed it opens up somewhere else (At 开发者_如何转开发a random position evrytime).
I am working under Windows XP SP3 , using IDE Visual Studio - 2010. Please provide a workaround to this problem.
I have uploaded a sample project showing the above mentioned problem .
Download link:
http://www.6ybh-upload.com/vt5i4z1wz9pl/Light.zip
You have to set:
Form1.StartPosition = FormStartPosition.Manual
Edit:
Here is a working sample:
Dim X As Integer = (Screen.PrimaryScreen.Bounds.Width - Me.Width) / 2
Dim Y As Integer = (Screen.PrimaryScreen.Bounds.Height - Me.Height) / 2
Me.StartPosition = FormStartPosition.Manual
Me.Location = New System.Drawing.Point(X, Y)
Edit 2:
Here is the improved code based on comments by Hans Passant, (much better):
Dim mainScreen As Screen = Screen.FromPoint(Me.Location)
Dim X As Integer = (mainScreen.WorkingArea.Width - Me.Width) / 2 + mainScreen.WorkingArea.Left
Dim Y As Integer = (mainScreen.WorkingArea.Height - Me.Height) / 2 + mainScreen.WorkingArea.Top
Me.StartPosition = FormStartPosition.Manual
Me.Location = New System.Drawing.Point(X, Y)
Try to use this after resize the screen
Me.Size = New System.Drawing.Size(800, 436)
Me.CenterToScreen()
In your question it isn't quite clear what you have actually tried since there is no such option as "Center" for the StartPosition property of a Form.
However, setting StartPosition to CenterScreen or
Me.StartPosition = FormStartPosition.CenterScreen
if you are doing it programmatically, should get you exactly what you need.
Reference: http://msdn.microsoft.com/en-us/library/system.windows.forms.formstartposition.aspx
Here is the solution:
Dim screen__1 As Screen = Screen.FromControl(frm)
Dim workingArea As Rectangle = screen__1.WorkingArea
frm.Location = New Point() With { _
.X = Math.Max(workingArea.X, workingArea.X + (workingArea.Width - frm.Width) / 2), _
.Y = Math.Max(workingArea.Y, workingArea.Y + (workingArea.Height - frm.Height) / 2) _
}
The Second One:
'frm = is the form object
Dim X As Integer = (Screen.PrimaryScreen.Bounds.Width - frm.Width) / 2
Dim Y As Integer = (Screen.PrimaryScreen.Bounds.Height - frm.Height) / 2
frm.StartPosition = FormStartPosition.Manual
frm.Location = New System.Drawing.Point(X, Y)
For VB.net 2010 put code to form load event
Call CenterToScreen()
this is built in method provided by VS
精彩评论