Snippet

Programový přístup ke Controls prostřednictvím jména

Přidáno: 24.8.2007       Kategorie: VB.NET - Komponenty       Autor: Viktor Langer

Někdy je vhodné mít možnost přístupu k jednotlivým objektům kolekce Controls programově přes jméno objektu. Bohužel jméno objektu se v tomto případě nedá "poskládat" jako textový řetězec přímo (např. Label+1 = label1, atd.) V těchto případech může pomoci jednoduchý následující kód (vznikl jako reakce na diskusi, kde zazněl požadavek hromadného vyplnění labelů v cyklu s tím, že je možno jej modifikovat na libovolné jiné prvky i akce s nimi):

'cyklus pro procházení prvky
For i As Integer = 1 To 10

   ' nalezení indexu prvku s názvem "labeli" - název možno libovolně programově konstruovat
   ' pokud metoda prvek daného názvu nenalezne, vrátí -1
   Dim ind As Integer = Me.Controls.IndexOfKey("label" & i)

   If ind < 0 Then
      MsgBox("prvek s názvem label" & i & " nenalezen!")
   Else
      ' index existuje, proto s prvkem daného indexu provedeme požadovanou operaci
      '(musí být regulérní, tzn. v tomto případě prvek s názvem "lebeli" musí podpotovat vlastnost "text"
      Me.Controls(ind).Text = "Tak toto je label " & i
   End If
Next

'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

' máme-li jinak ošetřeny výše uvedené možné chybové stavy
' je možno celé zkrátit

For i As Integer = 1 To 10
   Me.Controls(Me.Controls.IndexOfKey("label" & i)).Text = "Tak toto je label " & i
Next 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.