2016-07-28 30 views
2

ich ein Projekt von VB6 zu vb.net umgewandelt, wo ich eine gegebene Steuer gefunden, die innerhalb eines TabControl über die Sammlung Kontrollen als solcheForm.Controls gibt nichts zurück, wenn für eine Kontrolle aus, die in einem TabControl oder Panel

war
Frm.Controls("ControlName") 

Ich überprüft und die Kontrolle existiert in dem Formular.

I iterated auf alles, was in der Controls Collection ist und das Steuerelement ist nicht da, nur die TabControl, die es enthält. Bedeutet das, dass ich in vb.net eine Funktion entwickeln muss, um etwas zu tun, was vb6 tun könnte?

+0

In .NET würden Sie haben die 'TabControl' die Registerkarten und ihre Kontrollen, um zu wiederholen, damit Sie es finden. –

Antwort

3

Sie Me.Controls.Find("name", True) verwenden können Sie das Formular und alle seine Kind suchen Kontrollen mit Vornamen controlsto zu finden. Das Ergebnis ist ein Array mit gefundenen Steuerelementen.

Zum Beispiel:

Dim control = Me.Controls.Find("textbox1", True).FirstOrDefault() 
If (control IsNot Nothing) Then 
    MessageBox.Show(control.Name) 
End If 
1

Hier ist ein Beispiel dafür, wie alle Bedienelemente von Eltern rekursiv durchlaufen:

Private Function GetAllControlsRecursive(ByVal list As List(Of Control), ByVal parent As Control) As List(Of Control) 
    If parent Is Nothing Then Return list 
    list.Add(parent) 
    For Each child As Control In parent.Controls 
     GetAllControlsRecursive(list, child) 
    Next 
    Return list 
End Function 

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    Dim allControls As New List(Of Control) 

    For Each ctrl In GetAllControlsRecursive(allControls, Me) '<= Me is the Form or you can use your TabControl 

     'do something here... 

     If Not IsNothing(ctrl.Parent) Then 
      Debug.Print(ctrl.Parent.Name & " - " & ctrl.Name) 
     Else 
      Debug.Print(ctrl.Name) 
     End If 
    Next 
End Sub