提问人:JJSutton 提问时间:11/17/2023 最后编辑:Dmitry BychenkoJJSutton 更新时间:11/17/2023 访问量:61
是否可以用排序列表填充列表框?C#/WinForms
Is it possible to populate a listbox with a sortedlist? C#/WinForms
问:
我目前正在为一个大学项目制作一个基于刽子手的游戏的记分牌。
我被告知要创建一个记分牌,显示每个单词的最低猜测量,使用列表框显示单词+最低猜测,并使用排序列表来存储这些值。
我能够将我的最低猜测分数放入排序列表中,但是我现在正在努力寻找一种方法来将其显示在列表框中。
我尝试使用该属性来填充它,但是我收到以下错误以及代码行:listbox.DataSource
lsbScores.DataSource = scores;
System.ArgumentException:“复杂数据绑定接受 IList 或 IListSource 作为数据源。
我还想过可能做一个循环并遍历我的排序列表中的值,但是这感觉是错误的方法,如果这是正确的方法,我将如何去做?
对我来说,使用排序列表通常是错误的方法,但是这是我被告知要这样做的方式,所以我需要这样做。
答:
1赞
Dmitry Bychenko
11/17/2023
#1
例外情况说明了您可以尝试执行的操作:
System.ArgumentException:“复杂数据绑定接受 IList 或 IListSource 作为数据源。
(粗体是我的,德米特里)
您可以在 Linq 的帮助下提供所需类型的集合:
using System.Linq;
...
// You may want to use scores.Keys instead of scores.Values
lsbScores.DataSource = scores.Values.ToList();
1赞
Karen Payne
11/17/2023
#2
如果您定义了一个表单级别变量,如下所示
private SortedList<int, string> scores = new();
在窗体设计器中,选择“ListBox”,选择“属性”,然后选择“DisplayMember to Value”。
在代码中,使用 .ToList 分数。
lsbScores.DataSource = scores.ToList();
同时显示两者word+lowest guesses
创建一个类,例如,以下 其中 .ToString 将用作 ListBox 的 DisplayMember。
public class Guess
{
public int Key { get; set; }
public string Value { get; set; }
public override string ToString() => $"{Key} - {Value}";
}
用于将数据分配给 ListBox 的模型
lsbScores.DataSource = scores
.Select(x => new Guess()
{
Key = x.Key,
Value = x.Value
}).ToList(); ;
要获取 ListBox 中的当前项。
if (lsbScores.SelectedItem is not null)
{
Guess current = (Guess)lsbScores.SelectedItem;
}
评论
lsbScores.DataSource = scores.Values.ToList();