Musisz te labele przetrzymywać w tablicy. Przykład:
Label[] labels = new Label[10];
//Tu uzupełnianie tych opisów, wrzucenie ich na Forma, etc.
for(int i = 0; i < 10; ++i)
{
labels[i].Text = i.ToString();
}
EDIT: To z pośpiechu Ale masz racje, można to też tak zrobić.
Hmmmmm co do drugiego rozwiązania to chce zrobić coś innego niż tekst, tekst to był przykład. Od razu mówię, że nie rozumiem jak wykorzystać tamten zapis do zmiany koloru. Ja chciałem zrobić coś takiego
int[] tab = new int[4];
Color kolor = Color.White;
Color kolor2 = Color.FromArgb(45,45,45);
for(int i=0;i<4;i++)
{
if(tab[i]==1)
{
label[i].BackColor=kolor;
}
else
{
label[i].BackColor=kolor2;
}
}
Oczywiśnie wiem że to nie ma prawa działać ale chodzi mi ogólnie o coś takiego. Jeśli chodzi o tablicę to mogę tak zrobić ale wtedy mam dużo więcej kodu do zapisania ponieważ mam dużo tych labeli. :edit: Dopisze jeszcze coś. Moje zamierzenie jest takie
void zmiana(int poczatek, int koniec)
{
int[] tab = new int[4];
Color kolor = Color.White;
Color kolor2 = Color.FromArgb(45,45,45);
int j=0;
for(int i=poczatek;i
{
if(tab[j]==1)
{
label[i].BackColor=kolor;
}
else
{
label[i].BackColor=kolor2;
}
j++;
}
chciałbym do funkcji przekazywać tylko numerki labelów.
nie robisz tablicy, ale nazwy tych labeli muszą być utworzone wg jakiegoś schematu, np. tak jak domyślnie tworzy designer: label1, label2, label3 … label65536
Wtedy labele od możesz zmienić takim kodem:
private void ZmieńKolorTłaEtykiet(int pierwsza, int ostatnia, Color kolorDocelowy)
{
//dla każdej kontrolki na formatce (formularzu, okienku - jak zwał, tak zwał)
foreach (Control c in this.Controls)
//jeśli jest ona Labelem (a nie przyciskiem, checkboxem czy czymkolwiek innym)
if (c is Label)
{
//wyciągamy jej numer z nazwy kasując napis "label"
string numerWNazwie = c.Name.Replace("label", "");
//można też skasować pierwszych 5 znaków - jak kto woli
//string numerWNazwie = c.Name.Remove(0, 5);
//konwertujemy go do inta
int numer = Int32.Parse(numerWNazwie);
//jeśli numer pasuje
if (numer >= pierwsza && numer <= ostatnia)
//to zmieniamy kolor tła na docelowy
c.BackColor = kolorDocelowy;
}
}
Prawie wszystko da się zrobić na wiele sposobów, ale sądzę, że ta wersja jest optymalna.
Tylko mała uwaga - to nie będzie działać, jeśli labele masz nie bezpośrednio na formie, tylko w jakichś innych kontenerach (typu panel, groupbox, tabpanel). Wówczas należałoby przerobić tę metodę, aby działała rekurencyjnie.
W zasadzie mi też się coś takiego przyda, więc jeszcze ulepszyłem. Teraz można przekazać typ kontrolki do zmiany koloru tła, więc działa z przyciskami, etykietami i czym się chce
private void ZmieńKolorTłaKontrolek(int pierwsza, int ostatnia, Color kolorDocelowy)
where T: Control
{
//dla każdej kontrolki na formatce (formularzu, okienku - jak zwał, tak zwał)
foreach (Control c in this.Controls)
//jeśli jest ona żądanego typu
if (c is T)
{
//pobieramy numer z nazwy
int numer = this.PobierzNumerZNazwyKontrolki(c.Name);
//jeśli numer pasuje
if (numer >= pierwsza && numer <= ostatnia)
//to zmieniamy kolor tła na docelowy
c.BackColor = kolorDocelowy;
}
}
private int PobierzNumerZNazwyKontrolki(string nazwa)
{
int numer;
string cyfry = String.Empty;
//dla każdego znaku w nazwie
for (int i = 0; i < nazwa.Length; i++)
//jeśli jest cyfrą
if (Char.IsDigit(nazwa[i]))
//to jest dodawany
cyfry += nazwa[i];
//próba konwersji
Int32.TryParse(cyfry, out numer);
//zwrócenie wartości - uwaga, w przypadku, gdy w nazwie nie ma żadnego numeru zwróci 0
return numer;
}