从多个UserControl传递值

时间:2016-05-16 04:24:04

标签: vb.net user-controls

注意:可以找到类似的问题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的标签,文本框或组合框等。

1 个答案:

答案 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事件中来自动完成。

或者你可以选择在你的代码中的某个位置更新它们。