注意:可以找到类似的问题here。
如何从多个用户控件传递值?上面的链接中的问题提供了答案,但是我发现答案在我的情况下非常繁琐,并且传递值有延迟。 (我必须多次在UserControl1和UserControl2之间循环,同时在UserControl1中提交文本框或标签的更改,以查看UserControl2中任何值的传递。)
无论哪种方式,因为我有多个UserControls,其中每个都有很多文本框,标签和组合框,我非常不想为每个控件创建单独的Sub Routines和EventHandler,并且我想要一个值通过。
有更好的方法吗?我在想像......
'In UserControl10
Dim UserControl1 As New UserControl1
Dim UserControl2 As New UserControl2
Dim UserControl3 As New UserControl3
UC10Label1.Text = UserControl1.Label1.Text
UC10TextBox1.Value = UserControl2.TextBox1.Value
UC10ComboBox1.Text = UserControl3.ComboBox1.SelectedItem
上面的代码显然不能像我想象的那样工作,如何用最少量的代码实现类似的东西?
编辑:我有多个自定义UserControls,我在其中使用' views'。在每个UserControl中都有标签,文本框和&组合框。我有一个Panel1,在触发事件中,将在面板中显示UserControl(1-9);每个UserControl一次显示一个,并且取决于事件。我希望能够将每个UserControl(1-9)的值传递给UserControl10的标签,文本框或组合框等。
答案 0 :(得分:1)
我猜测最后三行不在Sub中。他们可能不工作,因为他们在表单显示之前执行。
如果要在程序中自动更新它们,则应将它们放在子文件中,但在更新时暂停表单布局,然后在代码完成后恢复布局。喜欢这个
Private Sub UpdateUserControls()
Me.SuspendLayout()
UC10Label1.Text = UserControl1.Label1.Text
UC10TextBox1.Value = UserControl2.TextBox1.Value
UC10ComboBox1.Text = UserControl3.ComboBox1.SelectedItem
Me.ResumeLayout()
End Sub
根据您要更新这些控件的时间,您可以在每次显示表单时执行此操作,方法是将上面的Sub
放在表单的.Shown
事件中。
或者你可以通过将它放在Timer的.tick
事件中来自动完成。
或者你可以选择在你的代码中的某个位置更新它们。