无法将表单定位到中心

时间:2011-03-03 15:35:47

标签: vb.net winforms

我有一个名为Form1的表单。它设置为启动 - 位置=中心但在执行时它会在其他地方打开(在随机位置evrytime)。

我在Windows XP SP3下使用IDE Visual Studio - 2010工作。请提供此问题的解决方法。

我上传了一个显示上述问题的示例项目。

下载链接:

http://www.6ybh-upload.com/vt5i4z1wz9pl/Light.zip

6 个答案:

答案 0 :(得分:9)

你必须设置:

Form1.StartPosition = FormStartPosition.Manual

编辑:

以下是一份工作样本:

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)

编辑2:

以下是基于Hans Passant评论的改进代码(更好):

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)

答案 1 :(得分:2)

在调整屏幕大小后尝试使用此功能

Me.Size = New System.Drawing.Size(800, 436)
Me.CenterToScreen()

答案 2 :(得分:1)

在你的问题中,由于没有像Form的StartPosition属性的“Center”这样的选项,所以你实际尝试的内容并不十分清楚。

但是,将StartPosition设置为CenterScreen或 Me.StartPosition = FormStartPosition.CenterScreen  如果你是以编程方式进行的,那么应该得到你所需要的。

参考:http://msdn.microsoft.com/en-us/library/system.windows.forms.formstartposition.aspx

答案 3 :(得分:1)

以下是解决方案:

    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) _
    }

答案 4 :(得分:1)

第二个:

    '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)

答案 5 :(得分:0)

对于VB.net 2010 把代码放到形成加载事件

Call CenterToScreen()

这是由VS

提供的方法构建的