访问子表单

时间:2015-04-20 13:10:32

标签: vb.net

  Private Sub tsGradovi_Click(sender As Object, e As EventArgs) Handles tsGradovi.Click
        For Each f As Form In Application.OpenForms
            If TypeOf f Is frmGradovi Then
                f.Activate()
                Return
            End If
        Next
        Dim f2 As New frmGradovi
        f2.MdiParent = Me
        f2.Show()
        f2.WindowState = FormWindowState.Maximized
        resetdgvGradova()
    End Sub

通过这种方式,我将Child表单添加到我的主表单中 在那个frmGradovi表单上我有datagridview。现在我在课程中添加了课程。

如何从我的类中添加datagridview源代码。

此代码没有帮助

 frmGradovi.DGV.DataSource = SQLDataset.Tables(0)

可能因为frmGradovi是form1的mdi孩子。

编辑: enter image description here

在课程konekcija我需要为frmGradovi表单设置数据源。但是frmGradovi形式是Form1的mdi子形式

1 个答案:

答案 0 :(得分:2)

避免这些类型的难题的一种方法是不要编写以形式为中心的代码。它们基本上是用于收集用户输入的沙箱。另一个元素是显式实例表单:在您的代码f2中是frmGradovi的实例。尝试在其他地方引用frmGradovi有可能会创建一个新的默认实例(您之后在Forms集合中有两种类型frmGradovi)。

我不知道 Gradovi konekcija 是什么,所以我将使用Customer示例。我的应用可能有frmCustomerCustomer类。当需要显示某个客户,而不是MDI父表单代码或按钮单击创建表单时,我将该作业留给Customer类:

Public Class Customer
    ' myFrm is an instance of frmCustomer, which is a Type
    Private myFrm As frmCustomer
    Private myDT As DataTable

    Public Sub Display(Id As Int32)

        CustId = Id

        If myFrm Is Nothing Then
            myFrm = New frmCustomer
            ' MDI boilerplate code
            '...
            ' one time setup code like populate static CBOs:
            '...
        End If

        UpdateDisplay()
        myFrm.BringToFront()
    End Sub

    Public Sub UpdateDisplay()
        ' display code when something changes such as show new selected Customer
        ' e.g.:
        LoadCustDataToDataTable(CustId)

        With myFrm
            .tbfirstName.Text = FirstName
            .tbLastName.Text = LastName
            ' ...etc
            .dgvPastOrders.DataSource = myDT
        End With
    End Sub

" key"是客户类负责客户表格。它创建它并保留对它的引用。当用户点击Save时,该任务也会被卸载到Customer.Save方法。

当用户关闭该表单时,您还可以添加其他旋转处理(如果允许他们关闭而不是隐藏它)。在您当前的方法中,您的类可以根据需要从集合中获取对其表单的引用。