开发者

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜