如何在表单加载事件的表单中心设置 Datagridview?

How to set a Datagridview at the centre of the form on form load event?

我有一个子窗体,它在多个事件中加载到父窗体中。它有从 sql 数据库中获取一些数据的 datagridview。我试图在表单加载事件中将它设置在子表单的中心,但我无法这样做。下面是我的子表单代码,我正在尝试将其设置为表单中心。

 Private Sub SelectClinic_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    clNameDGV.DefaultCellStyle.Font = New Font("Calibri", 15, FontStyle.Regular, GraphicsUnit.Point)

    clNameDGV.RowHeadersVisible = False
    clNameDGV.ColumnHeadersVisible = False
    clNameDGV.ReadOnly = True
    clNameDGV.Location = New Point((Me.Width - clNameDGV.Width) / 2, (Me.Height - clNameDGV.Height) / 2)

    ChClinic()

End Sub


Private Sub ChClinic()
    conn = New SqlConnection("Server=(Local);Database=DrDB;user=Tarak;Trusted_Connection=True;")
    conn.Open()
    Dim comStr As String = "Select Count(*) from Clinicinfo"
    Dim comm As New SqlCommand(comStr, conn)
    Dim i As Integer = comm.ExecuteScalar

    'CHECKING IF ANY CLINIC INFORMATION IS FOUND
    If i = 0 Then
        If MessageBox.Show("No clinic information found." + vbNewLine + "Will you like to create new clinic info right now ?", "No Clinic Info Found", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = vbYes Then
            Dim nf As New ClinicDetails
            nf.TopMost = True
            nf.ShowDialog(Me)
        Else
            Me.Close()
        End If

    End If

    'LOADING CLINIC NAMES INTO DATAGRIDVIEW
    Dim comStr3 As String = "Select Count(*) from Login_Detail"
    Dim comm3 As New SqlCommand(comStr3, conn)
    Dim iCh As Integer = comm3.ExecuteScalar
    'MsgBox(iCh)
    Dim comStr2 As String
    If iCh = 0 Then
        comStr2 = "Select Clinic_Name from Clinicinfo"
    Else
        comStr2 = "Select DISTINCT Clinic_Name from Clinicinfo Where Clinic_Status = 'Active'"
    End If
    Dim comm2 As New SqlCommand(comStr2, conn)
    Dim rd As SqlDataReader
    Dim dt As New DataTable
    rd = comm2.ExecuteReader
    dt.Load(rd)
    'clNameDGV.Columns.Clear()
    clNameDGV.AllowUserToAddRows = False
    clNameDGV.AutoGenerateColumns = True
    clNameDGV.DataSource = dt
    clNameDGV.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
    clNameDGV.Refresh()
    clNameDGV.Width = clNameDGV.Columns(0).Width
    clNameDGV.Location = New Point((Me.Width - clNameDGV.Width) / 2, (Me.Height - clNameDGV.Height) / 2)
    rd.Close()

    conn.Close()
End Sub

我还创建了一个按钮单击事件,它从数据库中删除数据,子 ChClinic() 最后运行,它清理并重新填充数据网格视图。删除数据并重新填充数据网格视图后,数据网格视图设置为子表单的中心。

如果您想要获取子表单左上角的 x,y 位置,以便它以父表单为中心,您需要包含 parent.x 值,您缺少该值:

所以这个:

clNameDGV.Location = 新点((Me.Width - clNameDGV.Width) / 2, (Me.Height - clNameDGV.Height) / 2)

应该是这样的:

clNameDGV.Location = 新点(Me.Left + (Me.Width - clNameDGV.Width) / 2, Me.Top + (Me.Height - clNameDGV.Height) / 2)

这将使您位于居中子项的左上角...

clNameDGV.Left = (Me.ClientSize.Width / 2) - (clNameDGV.Width / 2)
clNameDGV.Top= (Me.ClientSize.Height/ 2) - (clNameDGV.Height/ 2)

这会将控件正好放在窗体的中间