我已经实现了一个列表系统,该系统记录了用户名,他们所获得的总分以及完成该过程所花费的时间。我现在在尝试显示另一个班级的“玩家”列表时遇到问题。因此,在我的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);
}
}
答案 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();
方法中您的列表框将用作参数,因此此答案假设它是字符串。