2012-09-05 44 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

嗨,史蒂文,很抱歉,我的第二篇文章;這個論壇的作品與我學習的不同 –

相關問題