我发布了一个问题here,经过多次尝试后,我接受了建议我使用隐藏控件而不是添加控件的答案。
这样我的代码运行正常,但我想了解错误。
发生了什么:
当我按下一个按钮时,会添加一个新的DataGridView但是
a)即使其可见属性设置为True,它也不可见;
b)如果(当添加的DGV在表格上时)我将DGV属性设置为False,然后我将其重新设置为True,DGV出现但列没有调整大小;
c)如果我删除添加的DGV并重新添加它,它是"隐形"再次。
如果我跑另一个,那么所有这些麻烦都不会发生
如果:
a)我运行一个隐藏我的第一个表格并显示另一个表格的子;
b)然后我关闭第二个表格以回到第一个表格;
一切正常:
DGV正确添加;
它是可见的;
所有列都已正确调整大小;
如果我删除DGV或重新添加它,一切仍然有效。
我哪里错了?
答案 0 :(得分:0)
这是我之前链接中的代码。它在我的表单中显示了datagridview。正如您所看到的,它正是您的代码,除了“使用”块 - 以及检索数据表的方式。这是唯一的两个不同之处。
Private Sub ShowHideTbl()
Dim DTemp As DataTable = GetTable()
Dim DGV_Tbl As DataGridView = Nothing
Try
DGV_Tbl = CType(Me.Controls("DGV_Tbl"), DataGridView)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
If DGV_Tbl Is Nothing Then
If Me.CBox_ProcType.Text = "Select a Procedure" Then
MsgBox("You need To select a Procedure", vbInformation, "Unable to show table")
Exit Sub
End If
End If
DGV_Tbl = New DataGridView
With DGV_Tbl
.Name = "DGV_Tbl"
.DataSource = DTemp
Me.Controls.Add(DGV_Tbl)
.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
.RowHeadersVisible = False
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
End With
Dim DGV_H As Integer = 0
Dim DGV_W As Integer = 0
For Each S As DataGridViewRow In DGV_Tbl.Rows
DGV_H += S.Height
Next
DGV_H += DGV_Tbl.ColumnHeadersHeight
'Add more space to include spaces between cells
DGV_H += CInt(DGV_Tbl.Rows.Count * 0.45)
For Each S As DataGridViewColumn In DGV_Tbl.Columns
DGV_W += S.Width
Next
'Add more space to include spaces between cells
DGV_W += CInt(DGV_Tbl.Columns.Count * 0.45)
DGV_Tbl.Height = DGV_H
DGV_Tbl.Width = DGV_W
'Resize the Form
Me.Height += DGV_H + 30
Me.Controls("DGV_Tbl").Location = New Point(15, Me.Height - DGV_H - 30)
End Sub
你的问题最奇怪,因为我没有尝试和测试的代码,我唯一建议你将这段代码粘贴到一个新的表单中,看看它是否有效。如果是,则将表单1的其他控件添加到其中,再次运行代码,看它是否仍然有效。重复这个过程,直到找出原因。
我相信你可以通过这个找到你表单中真正发生的事情。谁知道,这种新形式可能会奏效。