制作我自己的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秒钟,但只选择一个。
感谢。
答案 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