如何从代码端访问用户控件的属性?

时间:2012-09-05 20:33:28

标签: vb.net user-controls handle

制作我自己的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

我的用户控件有几个标签,TextBox和TabPages(在TabControl中)。

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


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

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

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

我在考虑使用像

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

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

但我被困在这里。

-------------------------------------第3个帖子-------- -------

感谢Steve,我使用“Control.Find”和For Each解决了问题,但您的解决方案更容易。

有什么方法可以获取所选标签的名称,或者我必须在创建新标签页时创建一个数组?,我们的想法是只在选中标签时选择控件内部的控件文本。用户或每5秒钟,但只选择一个。

感谢。

1 个答案:

答案 0 :(得分:1)

从C#问题借用M4N的答案,并将其转换为VB:

最干净的方法是将所需的属性公开为usercontrol的属性,例如:

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

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

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

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

Dim c As ClientesEmpresa= CType(Me.ClientesTabControl.TabPages("Tab1").Controls("Control1"), ClientesEmpresa)
c.CheckBoxProperty = True