Zmiana kolorów w listView w pętli

0

Witam,
Mam taki problem (piszę komunikator), że gdy jakiś użytkownik się zaloguje to serwer wysyła listę do wszystkich użytkowników. Teraz chciałbym zrobić, że element na mojej liście kontaktów (u klienta) zmienia się na kolor zielony jeżeli użytkownik jest zalogowany i na kolor czerwony, gdy nie jest. Aktualnie mam tak, że owszem zmienia się kolor, ale wszystkich użytkowników. Chciałem usuwać elementy z przeszukiwanej listy, ale wtedy wyskakuje błąd w pętli, że jest ona modyfikowana. Te procedury WartoscKomorki itd. to przez lecące wątki. Potrzebne były invoke'i Co powinienem poprawić? Dzięki. Oto kod:

foreach (uzytkownik u in zalogowani)
                {   
                    for (int i = 0; i < ItemsCount(); i++)
                    {
                        if (!u.nazwa_uzytkownika.Equals(WartoscKomorkiString(i, 1)))
                        {
                            ColorChange(i, Color.Green);
                        }
                        else if (u.nazwa_uzytkownika.Equals(WartoscKomorkiString(i, 1)))
                        {
                            ColorChange(i, Color.Red);
                        }
                    }
                }
0
Lokos napisał(a)

Chciałem usuwać elementy z przeszukiwanej listy, ale wtedy wyskakuje błąd w pętli, że jest ona modyfikowana.

Nie wolno usuwać elementów z listy w foreach. Za to w for można jak najbardziej. Tylko oczywiście trzeba uważać na indeksy.

0

A jak do tablicy z elementami klasy użyć fora? Nie mogę znaleźć :P
Próbuję nawet wyłapywać w try-catch ten wyjątek od foreacha i tak dupa ;/

0

For dla każdej tablicy wygląda przecież tak samo.

0
somekind napisał(a)

For dla każdej tablicy wygląda przecież tak samo.

for (int j = 0; j < zalogowani.Count; j++)
{
     ...
     zalogowani[j].nazwa_uzytkownika;
     ...
} 

takie coś nie działa
Jeżeli to jest banał, to sorki, ale już mi naprawdę pada na mózg :P

EDIT:
Działa w ten sposób:

 for (int i = 0; i < ItemsCount(); i++)
                    {
                        ColorChange(i, Color.Red);
                    }

                    for (int i = 0; i < ItemsCount(); i++)
                    {
                        foreach (uzytkownik u in temp)
                        {
                            if (u.nazwa_uzytkownika == WartoscKomorkiString(i, 1) && temp != null)
                            {
                                AddItem("ZIELONY: " + u.nazwa_uzytkownika + "  " + WartoscKomorkiString(i, 1));
                                ColorChange(i, Color.Green);
                                //i++;
                            }
                        }
                    }

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