Я играю в игру.У меня есть список пользователей (ники):
List<string> users;
Этот список используется для отображения пользователям в ListBox, звоните 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));
}
}
Когда пользовательиграя, то у него есть ник в списке игр:
List<Game> games;
То, что я хочу, это когда игрок входит в игру, цвет ник-шоу в listaJogadores
, должен быть красным!Когда у меня в игре только один игрок, все в порядке, все игроки видят ник этого игрока красным, но когда другой игрок идет в игру, я получаю ArgumentOutOfRangeException в инструкции string nick = tmp.players.ElementAt(i).getNick();
Это мой код ... Дайте мне несколько идей / помогите, пожалуйста!Я думаю, что проблема заключается в for()
, но как я могу манипулировать всем списком без выполнения цикла?
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);
}