如何在表单加载事件的表单中心设置 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)
这会将控件正好放在窗体的中间
我有一个子窗体,它在多个事件中加载到父窗体中。它有从 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)
这会将控件正好放在窗体的中间