另一种形式的VB.NET Call Sub

时间:2014-09-19 07:19:51

标签: vb.net forms subform

我知道,有很多与此相关的问题,但我仍然无法找到可行的解决方案。

通常,它会像这样工作:一个表单在它的容器中创建另一个表单的实例,如下所示:

Dim PolInstIn As New SubForm1

Private Sub LoadDetail()

    PolInstIn.TopLevel = False
    PolInstIn.Name = "Sub From" 
    PolInstIn.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    PolInstIn.Dock = DockStyle.Fill

    Me.GroupBox6.Controls.Add(PolInstIn)
    PolInstIn.Show()

End Sub

然后从子表单中调用Public Sub很容易:

    Call PolInstIn.MyPublicSubInSubForm1()

但是,在这种情况下,这对我不起作用。当我运行MyPublicSubInSubForm1()时,它不会抛出任何错误,但不会执行任何操作。如果我将一个值写入SubForm1文本框并将其读回,它会读取,但我没有在屏幕上看到它,所以我怀疑它被写入其他意外的实例。

我怀疑这是因为我的父表单也是以与SubForm1非常类似的方式创建的表单的实例。基本上,ParentForm是一个加载到tabPage中的表单,SubForm1是一个加载到ParentForm中的模块。它可以存在于许多副本(标签)中。

你能指出任何简单的解决方案吗?

此致

Libor的

3 个答案:

答案 0 :(得分:0)

我看到这个问题得到了很多意见,所以这里有一个答案。

1)没有子表单的可视化响应(仅结果) - 如果我创建了超过1个表单实例,则可能发生这种情况。这个例子只是一个例子,但如果用这种方式(意外地)使用它,它可能每次都会导致子表单的新定义(以及随后出现的症状)。在实践中,我将表单加载从加载数据拆分为表单(由该表单中的公共子表完成)。

2)如果你还想要一个后引用(即父网格形式),将Public ParentFormGrid定义为GridName(注意ParentForm是一个保留名称),并在加载子表单时设置

PollInstIn.ParentFormGrid = Me

这样您就可以一直访问父表单,即在以子表单编辑的行上保存更改时重新加载网格。

答案 1 :(得分:-1)

向公众提出Private Sub LoadDetail()

Public Sub LoadDetail()

它适用于我的项目。希望它是你想要的

答案 2 :(得分:-2)

Dim PolInstIn As New SubForm1

Private Sub LoadDetail()

    PolInstIn.Name = "Sub From"
    PolInstIn.Show()
    PolInstIn.TopLevel = False
    PolInstIn.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    PolInstIn.Dock = DockStyle.Fill
    PolInstIn.Update()
    PolInstIn.Refresh()

    Me.GroupBox6.Controls.Add(PolInstIn)


End Sub