使用列表框显示不同类的列表

时间:2019-03-14 12:22:45

标签: c# list winforms

我已经实现了一个列表系统,该系统记录了用户名,他们所获得的总分以及完成该过程所花费的时间。我现在在尝试显示另一个班级的“玩家”列表时遇到问题。因此,在我的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 :(得分:0)

几年前我也遇到了这个问题:GetPlayers函数是静态的,这意味着无法从其他类访问内容(值)或变量。

您需要删除“ static”并在HighScoresMenu类中启动MainMenu,如下所示:

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

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

我希望这可以解决问题(从函数中删除关键字“ static”并启动MainMenu类) 我很高兴听到当前的情况是否得到解决。 :)我希望我确实记得很好。

编辑: 在我再次查看之后,您正在foreach上将其作为var播放器循环播放。 但是将其作为Player播放器循环播放。 因为您将另一个类作为Player对象放入了Players列表内。现在,您将其检索为变种。

最后的结论是


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

我很好奇,让我知道:D

EDIT2: 如果您永远不知道,还可以让您知道。 您总是只制作一个Player,因此实际上并不需要列表和这段代码:

  

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

这将对它进行排序,但是您对此不做任何事情(var'TopTenLevel1')。只是让您知道:)您可以通过返回排序列表来保存它。 (也可以覆盖变量)

答案 1 :(得分:0)

好的,首先,我可能无法正确理解您的问题。我从中得到的是您的列表视图显示了对象的名称,因此显示了“ Game.Player”。因此,您必须更改以下内容:

ListBoxLevel1.Items.Add(players);

类似于以下内容:

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

我不确定Items.Add();方法中您的列表框将用作参数,因此此答案假设它是字符串。