屏幕或父母的中心表格

Win*_*Too 8 vb.net

由于在VB.NET中定位表单的内置功能并不总是适合使用我尝试让我的sub做到这一点.

但我错过了一些东西......

Public Sub form_center(ByVal frm As Form, Optional ByVal parent As Form = Nothing)

    Dim x As Integer
    Dim y As Integer
    Dim r As Rectangle

    If Not parent Is Nothing Then
        r = parent.ClientRectangle
        x = r.Width - frm.Width + parent.Left
        y = r.Height - frm.Height + parent.Top
    Else
        r = Screen.PrimaryScreen.WorkingArea
        x = r.Width - frm.Width
        y = r.Height - frm.Height
    End If

    x = CInt(x / 2)
    y = CInt(y / 2)

    frm.StartPosition = FormStartPosition.Manual
    frm.Location = New Point(x, y)
End Sub
Run Code Online (Sandbox Code Playgroud)

如何定义,如何让这个子窗体正确放置在屏幕中间或其他形式?

mik*_*111 30

我知道这是一个老帖子,这并没有直接回答这个问题,但是对于那些偶然发现这个问题的人来说,只需简单地完成一个表格就可以完成,而不需要你自己编写程序.

System.Windows.Forms.Form.CenterToScreen()System.Windows.Forms.Form.CenterToParent()允许您居中表格中提到的屏幕或引用取决于你需要哪一个父窗体.

需要注意的一点是,必须在加载表单之前调用这些过程.最好在form_load事件处理程序中调用它们.

示例代码:

  Private Sub Settings_Load(sender As Object, e As EventArgs) Handles Me.Load

    Me.CenterToScreen()

    'or you can use 

    Me.CenterToParent()

End Sub
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 21

代码是错的.此代码运行得足够晚也很重要,构造函数太早了.请务必从Load事件中调用它,此时表单已正确自动调整并根据用户的首选项进行调整,StartPosition属性不再重要.固定:

Public Shared Sub CenterForm(ByVal frm As Form, Optional ByVal parent As Form = Nothing)
    '' Note: call this from frm's Load event!
    Dim r As Rectangle
    If parent IsNot Nothing Then
        r = parent.RectangleToScreen(parent.ClientRectangle)
    Else
        r = Screen.FromPoint(frm.Location).WorkingArea
    End If

    Dim x = r.Left + (r.Width - frm.Width) \ 2
    Dim y = r.Top + (r.Height - frm.Height) \ 2
    frm.Location = New Point(x, y)
End Sub
Run Code Online (Sandbox Code Playgroud)

顺便提一下,实际实现Load事件处理程序的极少数理由之一.


use*_*629 6

这也可能有用:

    myForm.StartPosition = FormStartPosition.CenterParent
    myForm.ShowDialog()
Run Code Online (Sandbox Code Playgroud)

您还可以使用FormStartPosition.CenterScreen