How to set Foreground Color in a ListBox single element?

Posted by user1038056 on Stack Overflow See other posts from Stack Overflow or by user1038056
Published on 2011-11-17T17:47:29Z Indexed on 2011/11/17 17:50 UTC
Read the original article Hit count: 280

Filed under:
|
|

I'm doing a game. I have a list of users (nicks):

List<string> users;

This list is used to show to the users on a ListBox, call listaJogadores.

    public delegate void actualizaPlayersCallback(List<string> users);

    public void actualizaPlayers(List<string> users)
    {
        listaJogadores.BeginInvoke(new actualizaPlayersCallback(this.actualizarListaPlayers), new object[] { users });
    }

    public void actualizarListaPlayers(List<string> users)
    {
        listaJogadores.Items.Clear();
        for (int i = 0; i < users.Count; i++)
        {
            listaJogadores.Items.Add(users.ElementAt(i));
        }         
    }

When a user is playing, then it have is nick on the list of games:

List<Game> games;

What I want is when a player enter in a game, the color of is nick show in listaJogadores, must be Red! When I have only one player in a game, everything is ok, all the players see the nick of that player in red, but when another player go to a game, then I get an ArgumentOutOfRangeException in the instruction string nick = tmp.players.ElementAt(i).getNick();

This is my code... Give me some ideas/help please! I think that the problem is the for(), but how can I manipulate an entire list without doing a loop?

listaJogadores.DrawMode = DrawMode.OwnerDrawFixed;

private void listaJogadores_DrawItem(object sender, DrawItemEventArgs e)
    {
        e.DrawBackground();
        Brush textBrush = SystemBrushes.ControlText;
        Font drawFont = e.Font;

        for (int i = 0; i < games.Count; i++)
        {
            Game tmp;
            tmp = games.ElementAt(i);
            for (int j = 0; j < tmp.players.Count; j++)
            {
                string nick = tmp.players.ElementAt(i).getNick();

                if (listaJogadores.Items[e.Index].ToString() == nick)
                {
                    textBrush = Brushes.Red;//RED....
                    if ((e.State & DrawItemState.Selected) > 0)
                        drawFont = new Font(drawFont.FontFamily, drawFont.Size, FontStyle.Bold);
                }
                else if ((e.State & DrawItemState.Selected) > 0)
                {
                    textBrush = SystemBrushes.HighlightText;
                }
            }
        }
        e.Graphics.DrawString(listaJogadores.Items[e.Index].ToString(), drawFont, textBrush, e.Bounds);
    }

© Stack Overflow or respective owner

Related posts about c#

Related posts about listbox