Odwołanie do obiektów tego samego typu w inny sposób niż po ich nazwie

0

Witam.
Chciałbym zapytać czy istnieje możliwość odwołania się do konkretnego obiektu i zmienić np. jego wartość, ale odwołując się nie bezpośrednio po nazwie a inaczej.
Przyjmijmy że mam w programie 3 groupboxy a w nich np. po 3 textboxy. Dla ułatwienia nazwijmy je w grupboxie pierwszym jako G1Box1, G1Box2, G1Box3. W groupboxie drugim G2Box1, G2Box2, G2Box3, a w trzecim G3Box1, G3Box2, G3Box3. Teraz załóżmy, że mam w programie pewną zmienną x, która przyjmuje wartości od 1 do 3 w zależności od pewnych warunków. Do tego jest button i przypisana do niego funkcja jako onclick event. To co chcę osiągnąć to sprawdzenie w tej funkcji wartości tej zmiennej x i jeśli ma ona wartość 1 to zmieniamy tekst w textboxach w grupboxie1 na jakiś tam "XYZ" (nieistotne). Jeśli zmienna x ma wartość 2 to robimy to samo ale w grupboxie2, a jeśli wynosi 3 to w groupboxie3. W skrócie można to zrobić tak:

funkcjaButtonClick{
if(zmiennax == 1){
G1Box1.Text = "XYZ"
G1Box2.Text = "XYZ"
G1Box3.Text = "XYZ"
}
if(zmiennax == 2){
G2Box1.Text = "XYZ"
G2Box2.Text = "XYZ"
2Box3.Text = "XYZ"
}
if(zmiennax == 3){
G3Box1.Text = "XYZ"
G3Box2.Text = "XYZ"
G3Box3.Text = "XYZ"
}
}

Ale co będzie gdy będę miał nie 3 a 30 groupboxów z np. 10 textboxami w każdym. Czy jest inna możliwość niż kopiowanie głupio tego samego kodu dla wszystkich opcji zmiennej x?
Czy można w jakiś sposób potraktować te textboxy jako np. tablicę gdzie podaję wartość zmiennej x? Czyli coś w stylu G[zmiennax].Box1.Text = "XYZ' jako nazwa groupboxa?
Nie wiem, czy dobrze to wytłumaczyłem, ale mam nadzieję że tak.
Proszę o jakieś wskazówki jak rozwiązać powyższy problem.
Dziękuję z góry.

1
var controls = Controls.OfType<TextBox>().Cast<Control>().ToList();

W ten sposób możesz sobie zebrać wszystkie kontrolki i po nich iterować

0

Witam.
Czy w ten sposób miałbym zgrupować wszystkie kontrolki ogólnie, czy wszystkie z jednej grupy?
Jak potem przekazać argument w postaci zmiennej i na jego podstawie wywołać konkretną grupę?

0

Controls zawiera listę kontrolek, które są w danym kontenerze (Panel, Form, GroupBox itp).
Możesz najpierw zwrócić listę GroupBoxów dla Form i potem dla każdego GroupBoxa znaleźć TextBoxy. Albo rekurencyjnie znaleźć wszystkie TextEdity we wszystkich kontenerach na Formie.
Czy dany obiekt to ten co chcesz zmienić to albo po typie, jak @jarzi napisał, albo po jakiejś właściwości np Tag. Ustawiasz interesującym TextEditow w Tag jakaś wartość, którą sprawdzasz.

0

Czyli rozumiem, że w ten sposób zbieram wszystkie kontrolki jednego typu z całej formy tak?
Czy później mogę porównać jakoś ich nazwę ze stringiem (sprawdzić, czy zawierają określony ciąg znaków w nazwie)?
Jakoś użyć polecenia foreach controls albo coś w tym stylu i po kolei sprawdzać ich nazwę? Czy jedynie można to uczynić po tagu?

0

Control to lista nie z całej formy tylko z kontenera. Jesli amsz formę i panel to Cintrols dla formy zawiwra panel a Controls dla panelu dopiero TextEdity.
Co do nazw to tak. W foreachumozesz sprawdzać nazwy, taki A nawet rzutowac na TextEdit i jest taktowanie się powiedzie to masz dostęp do wszystkich właściwości kontrolki.

0

A nie prościej byłoby stworzyć usercontrolkę z groupboxem i tymi trzema textboxami i tę całą kontrolkę kopiować w ramach formy?
I niech ta kontrolka wystawia jedną właściwość/metodę do ustawiania tekstu, wtedy od razu będzie wielokrotnie mniej kodu do pisania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1