2012-09-05 23 views
-1

使我自己的UserControl,我可以聚合新的TabPages到TabControl,然后,在TabPage内,我使用下面的代码添加我自己的UserControl。如何从代码端访问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中做到这一点?


对不起,我只是注意到,回车键发表评论。 :(

感谢您的反馈,我明白你在说什么,但我缺少中间的东西。

当我创建在上面的代码运行时间控制,我可以很容易地访问到的属性创建的对象,在这种情况下我的用户控件,但我不明白如何从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)() 

但是我卡在这里。

------------------------------------- 3th post ------- --------

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

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

谢谢。

回答

0

借用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 

这样你可以控制要公开哪些属性以及它们应该是读/写还是只读。 (当然你应该使用更好的属性名称,具体取决于它们的含义)。

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

要回答你的第二个问题,如果你需要访问你的动态创建的控件,你可以这样做很容易地使用他们的名字,例如:

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

感谢Four的反馈,我明白你在说什么,但我错过了中间的东西。 –

+0

对不起,我只是注意到输入发表评论。 :( –

+0

嗨,史蒂文,很抱歉,我的第二篇文章;这个论坛的作品与我学习的不同 –

相关问题