【问题标题】:Dynamically added control (DataGridView) doesn't work properly动态添加的控件(DataGridView)无法正常工作
【发布时间】:2019-05-05 00:10:53
【问题描述】:

我发布了一个问题here,经过多次尝试,我接受了建议我使用隐藏控件而不是添加控件的答案。

这样我的代码可以正常运行,但我想理解错误。

这就是发生的事情: 当我按下按钮时,会添加一个新的 DataGridView 但
a) 即使他的属性 visible 设置为 True,它也不可见;
b) 如果(当添加的 DGV 在表单上时)我将 DGV 属性设置为 False,然后我将其重新设置为 True,则 DGV 出现但未调整列大小;
c) 如果我删除添加的 DGV 并重新添加它,它又是“不可见的”。

如果我运行另一个 SUB,所有这些问题都不会发生

如果:
a) 我运行一个隐藏我的第一个表单并显示另一个表单的子程序;
b) 然后我关闭第二个表单以返回第一个表单;
一切正常:
DGV 已正确添加;
它是可见的;
所有列的大小都已正确调整;
如果我删除 DGV 或重新添加它,一切仍然有效。

我哪里错了?

【问题讨论】:

  • 添加 DGV 的代码是什么?
  • @Aimnox 所有代码都在我的另一个问题中。我在这个问题的开头给出了链接。
  • 在创建datagridview后尝试在第一种形式中添加'Me.Hide()Me.Show()',看看它是否真的是因为表格1的隐藏/取消隐藏过程?
  • @HaPhan 是的!我按照您的建议进行了尝试(带有 Me.Hide() Me.Show() 的按钮)并且代码有效。所以我尝试修改MyBase.Load(没有运气)。请建议我在哪里寻找错误。

标签: vb.net


【解决方案1】:

这是我从您之前的链接中获得的代码。它显示了我的表单中预期的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 的其他控件添加到其中,再次运行代码,看看它是否仍然有效。重复这个过程,直到找出原因为止。

我相信你可以通过这个找出你的表单中真正发生的事情。谁知道呢,这种新形式可能会奏效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2022-12-05
    • 2014-07-23
    相关资源
    最近更新 更多