我知道,有很多与此相关的问题,但我仍然无法找到可行的解决方案。
通常,它会像这样工作:一个表单在它的容器中创建另一个表单的实例,如下所示:
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的
答案 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