Jak odwołać się do zmiennej w pętli for?

0

Witam,

Mam kod w postaci:

for (int a = 0; a < 255; a++)
                    {
                        if (Globals.ThisAddIn.zmienna_nr[0, 0, 0] == control.PlaceholderText) { Globals.ThisAddIn.zmienna_nr[0, 0, 0] = control.Text; Globals.ThisAddIn.acp2.label2.Text = control.Text; if (Globals.ThisAddIn.acp2.panel2.Visible == false) { Globals.ThisAddIn.acp2.label301.Text = control.Text; Globals.ThisAddIn.acp2.label302.Text = control.Text; Globals.ThisAddIn.acp2.label303.Text = control.Text; Globals.ThisAddIn.acp2.label304.Text = control.Text; Globals.ThisAddIn.acp2.label305.Text = control.Text; Globals.ThisAddIn.acp2.label306.Text = control.Text; Globals.ThisAddIn.acp2.label307.Text = control.Text; Globals.ThisAddIn.acp2.label308.Text = control.Text; Globals.ThisAddIn.acp2.label309.Text = control.Text; Globals.ThisAddIn.acp2.label310.Text = control.Text; Globals.ThisAddIn.acp2.label311.Text = control.Text; Globals.ThisAddIn.acp2.label312.Text = control.Text; } }                  
                    }

I potrzebuje podmienic wartosci statyczne na zmienna a:

np. Globals.ThisAddIn.zmienna_nr[a, 0, 0]
np. Globals.ThisAddIn.acp2.label**a**.Text

Jak zrobic zeby to dzialalo?

1

pierwsze robisz tak jak zrobiles

drugiego tak nie zrobisz. Musisz wszystkie labely wrzucic do kolekcji/tablicy i wtedy bedziesz mogl po nich iterowac [a]

0

oczywiście możesz szukać labele po nazwie ale wydajnościowo będzie to słabe
w jaki sposób stworzyłeś tyle labeli? Wrzucałeś je po kolei na forme? :|

0

wrzucalem po kolei, jak je wrzucic do kolekcji/tablicy?

0

Nie wiem co to jest zmienna_nr, ale jeśli to jest jakaś "tablica 3-wymiarowa", to odwołanie się do elementów powinno raczej wyglądać tak

zmienna_nr[a][0][0]

</del>Nie wiem czemu, ale widziałem C++ w tagu :D

label302 label312 label308 - powinna być jakaś tablica/kontener o nazwie label i wtedy odwołanie jest postaci label[302] label[a]

Jak się widzi tyle kropek to od razu się nasuwa myśl, że coś zostało skopane na etapie projektowania.

0

Mozesz mi to dokladnie opisac jak to zrobic? Bo w c# mało ogarniam.

Globals.ThisAddIn.acp2.label[a + 2] nie działa

0

Rozsądniejsze było by chyba stworzenie ich dynamicznie przy okazji zapisanie referencji do tablicy.

Coś na zasadzie:

            Label[] labels = new Label[255];

            for (int i = 0; i < 254; i++)
            {
                labels[i] = new Label();
                this.Controls.Add(labels[i]);
                labels[i].Text = i.ToString();
                labels[i].Left = 0;
                labels[i].Top = i*25;
            }

potem możesz łatwo odwołać się do każdego labela

0

A jezeli mam juz labele statycznie i chce sie do nich odwolywac tak jak napisalem czyli: label[a+2] itd.. ?

0

przeciez napisalem Ci ze sie nie da.

0

Tak jak napisali poprzednicy.
Możesz upakować to w jakiejś tablicy, ew wyszukiwać po nazwie.

3

Jak labele są na formie to wyciągnąć do kolekcji jest prosto:
Wersja najprostsza bez przeszukiwania dzieci:

var labels = this.Controls.OfType<Label>().OrderByDescending(x=>x.Name);

Oczywiście propozycje z dodaniem tego do kolekcji od razu jest bardzo dobra, ale jak już bym na klikał 300+ label'i też by mi się tego nie chciało zmieniać. :D

0

Dzieki wielkie, a ten Controls.Find jak dziala? ;p

0

Tworzysz tablice labeli jako pole globalne klasy formy.

Label[] FormLabels;

W konstruktorze klasy formy wywołujesz taki kod:

FormLabels = new Label[50];
FormLabels[0] = label1;
FormLabels[1] = label2;
FormLabels[2] = label3;
FormLabels[3] = label4;
FormLabels[4] = label5;

I tak dalej.

W pierwzej linii jako ilość podajesz co najmniej tyle, ile jest na formie.

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