我的系统包含ListBox
中的整数。我添加了一个“随机播放”Button
,当用户点击时,它应该将ListBox
中存储的项目随机排列为随机顺序。
但是,我使用的代码不适用于此。有没有人对如何生成随机按钮来随机化ListBox
内的数据有任何建议?
答案 0 :(得分:1)
我不知道为什么要将它存储在buttonShuffle.ObjectCollection
类型的变量中。
只需访问ListBox的Items
属性:
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
object value = listBoxAddedIntegers.Items[k];
listBoxAddedIntegers.Items[k] = listBoxAddedIntegers.Items[n];
listBoxAddedIntegers.Items[n] = value;
}
如果您因为想要更短的名字而这样做,请使用ListBox.ObjectCollection
或var
:
var items = this.listBoxAddedIntegers.Items;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
object value = items[k];
items[k] = items[n];
items[n] = value;
}
答案 1 :(得分:1)
让您的生活更轻松,使用DataTable
来保存您的列表项,为其添加另一个可以分类的列:
//this is a class wide variable
DataTable _d = new DataTable();
//in your constructor
_d.Columns.Add("DisplayThis");
_d.Columns.Add("SortThis", typeof(int));
_d.DefaultView.Sort = "[SortThis] ASC";
yourListBox.DataSource = _d.DefaultView;
yourListBox.DisplayMember = "DisplayThis";
//in your method that formerly loaded the listbox items
Random r = new Random();
foreach(string s in yourListItemsToDisplayArray)
d.Rows.Add(new object[] { s, (int)r.Next(1000) });
//or if the listbox is to show numbers
Random r = new Random();
foreach(int i in yourListItemsToDisplayArray)
d.Rows.Add(new object[] { i.ToString(), (int)r.Next(1000) });
每当你想要改变它们时,只需要传递数据表,改变数字:
//your shuffle button click handler
shuffleButton_Click(object sender, ClickEventArgs e){
Random r = new Random();
foreach(var ro in _d.Rows)
ro["SortThis"] = r.Next(1000);
}
答案 2 :(得分:0)
这一行
buttonShuffle.ObjectCollection list = listBoxAddedIntegers.Items;
毫无意义。编译器将尝试创建一个名为list
的{{1}}类型的变量,我假设它不是有效的类型。
我认为您需要做的是让buttonShuffle.ObjectCollection
成为list
(或List<int>
),然后从{{填充var
1}}在方法结束时,使用适合该操作的任何方法(Add,AddRange等)