Использование списка для отображения списка разных классов - PullRequest
0 голосов
/ 14 марта 2019

Я внедрил систему списков, которая записывает имена пользователей, общее количество баллов, которые они набирают, и количество времени, которое потребовалось для этого.У меня сейчас проблемы с попыткой отобразить список "игроков" из другого класса.Поэтому в моей форме HighScoresMenu при попытке отобразить содержимое списка игроков в поле списка в окне списка отображается только «Game.Player».

Есть ли какие-либо возможные решения этой проблемы.Любая помощь будет оценена.

public partial class MainMenu : Form
{

   public static List<Player> GetPlayers(float newScore, float newPoints, 
   string PlayersName)
   {
       var players = new List<Player>();
       var newPlayer = new Player
       {
           Name = PlayersName,
           Points = newPoints,
           Timer = newScore
       };
       players.Add(newPlayer);

       var TopTenLevel1 = players.OrderByDescending(x => x.Timer).Take(10);
       return players;
   }
}

public partial class HighScoresMenu : Form
{
    foreach (var players in MainMenu.GetPlayers(newScore, newPoints, 
    PlayersName))
    {
        ListBoxLevel1.Items.Add(players);
    }
} 

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Хорошо, для начала, возможно, я не правильно понял ваш вопрос.Что я получаю из этого, так это то, что ваш список отображает имя объекта, отсюда и «Game.Player».Поэтому вам придется изменить следующее:

ListBoxLevel1.Items.Add(players);

на что-то вроде следующего:

ListBoxLevel1.Items.Add($"Player: {players.Name}, Score: {players.Points}");

Я не уверенчто ваш список принимает в качестве параметра в методе Items.Add();, поэтому этот ответ предполагает, что это строка.

0 голосов
/ 14 марта 2019

У меня была эта проблема также несколько лет назад: функция GetPlayers является статической, это означает, что содержимое (значение) или переменная не доступны из других классов.

Вам необходимо удалить «статический»и запустить MainMenu в классе HighScoresMenu следующим образом:

//MainMenu
public static List<Player> GetPlayers(float newScore, float newPoints, string PlayersName)

//HighScoreMenu
MainMenu main = new MainMenu(); 
menu.GetPlayers(newScore, newPoints, PlayersName);

Я надеюсь, что это решит проблему (удаление ключевого слова «static» из функции и запуск класса MainMenu). Я был бы рад услышать, если текущийСитуация решена или нет.:) Надеюсь, я хорошо это запомнил.

РЕДАКТИРОВАТЬ: После того, как я посмотрел второй раз, вы начинаете зацикливать его как var player.Но зациклите это как Player player.Потому что вы вставили в другой класс как объект Player в списке игроков.Теперь вы извлекаете его как переменную.

Итак, окончательное заключение:


    public partial class HighScoresMenu : Form
{
    foreach (Player players in MainMenu.GetPlayers(newScore, newPoints, 
    PlayersName))
    {
        ListBoxLevel1.Items.Add(players.getName());
    }
} 

Мне любопытно, дайте мне знать: D

РЕДАКТИРОВАТЬ2: Также сообщая, если вы никогда не узнаете.Вы всегда делаете только одного игрока, так что на самом деле список не нужен, и этот фрагмент кода:

var TopTenLevel1 = players.OrderByDescending(x => x.Timer).Take(10);

Это будет порядокно вы ничего с этим не делаете (var 'TopTenLevel1').Просто сообщаю :) Вы можете сохранить упорядоченный список, вернув его.(также возможна перезапись переменной)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...