0

制作我自己的 UserControl,我可以将新的 TabPages 聚合到 TabControl,然后在 TabPage 内部,我使用以下代码添加自己的 UserControl。

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim TabX As New Windows.Forms.TabPage("Tab " & TabCount.ToString) '(ConfiguracionTabPage)
    Dim MyControl As New ClientesEmpresa
    MyControl.Name = "Control" & TabCount.ToString

    If ClientesTabControl.TabPages.Count = 10 Then
        ClientesTabControl.TabPages.RemoveAt(9)
    End If
    TabX.Controls.Add(MyControl)

    TabX.Name = "Tab" & TabCount.ToString
    TabX.Text = "Tab" & TabCount.ToString

    MyControl.TitularLbl.Text = "Coca Cola"

    Me.ClientesTabControl.TabPages.Insert(0, TabX)
    Me.ClientesTabControl.SelectedIndex = 0
    TabCount += 1
End Sub

我的用户控件有几个标签、文本框和 TabPages(在 TabControl 内)。

现在我想从源代码中动态更改一些属性,但我不知道如何访问它们。我发现的最相似的主题是How to Acces of an User control in c#,但是,正如标题所说,在 C# 中,我如何在 VB.NET 中做到这一点?


抱歉,我只是注意到 Enter 键发布了评论。:(

感谢您的反馈,我明白您在说什么,但我在中间遗漏了一些东西。

当我在上面的代码中在运行时创建控件时,我可以轻松访问所创建对象的属性,在本例中是我的 UserControl,但我不明白如何从外部访问该控件的特定实例的属性Button_Click; IE。另一个 button_click 事件(第二个按钮)

我正在考虑使用类似的东西

Dim ControlList As Windows.Forms.Control() = Me.ClientesTabControl.TabPages(0).Controls.Find("ModeloLbl", True)

或者

ClientesTabControl.TabPages(0).Controls.OfType(Of AlarmasVehiculo)()

但我被困在这里。

------------------------------------- 第 3 篇文章 ------------ ----

谢谢史蒂夫,我使用“Control.Find”和 For Each 解决了,但您的解决方案更容易。

有什么方法可以获取选定选项卡的名称,或者我必须在创建新 TabPage 时创建一个数组?,想法是仅在用户或每个用户选择时更新选定选项卡内的控件文本5 秒,但只是在选定的一个。

谢谢。

4

1 回答 1

1

从 C# 问题中借用 M4N 的答案,并将其翻译为 VB:

最干净的方法是将所需的属性公开为用户控件的属性,例如:

Public Class MyUserControl
    ' expose the Text of the richtext control (read-only)
    Public ReadOnly Property TextOfRichTextBox As String
        Get 
            Return richTextBox.Text
        End Get
    End Property

    ' expose the Checked Property of a checkbox (read/write)
    Public Property CheckBoxProperty As Boolean
        Get 
            Return checkBox.Checked
        End Get
        Set (value As Boolean)
            checkBox.Checked = value
        End Set
    End Property

    '...
End Class

通过这种方式,您可以控制要公开的属性以及它们应该是读/写还是只读的。(当然,您应该为属性使用更好的名称,具体取决于它们的含义)。

这种方法的另一个优点是它隐藏了用户控件的内部实现。如果您想将您的富文本控件与其他控件交换,您不会破坏控件的调用者/用户。

要回答您的第二个问题,如果您需要访问动态创建的控件,您可以使用它们的名称轻松完成,例如:

Dim c As ClientesEmpresa= CType(Me.ClientesTabControl.TabPages("Tab1").Controls("Control1"), ClientesEmpresa)
c.CheckBoxProperty = True
于 2012-09-05T20:50:09.327 回答