如何在ListBox中随机化文本项?

时间:2014-02-05 14:47:47

标签: c# ms-access

美好的一天!我想帮助我的编程项目中的简单代码。 我的问题是我找不到如何在列表框中随机化文本项的解决方案。这些项目是从我的 MS Access 数据库中读取的。这是我的一些代码。

Com.CommandText = "SELECT * FROM search";
OleDbDataReader reader = Com.ExecuteReader();
object[] obj = new object[256];

while (reader.Read())
{
    reader.GetValues(obj);

    if (label1.Text == obj[0].ToString())
    {
        listBox1.Items.Add(reader.GetString(1));
        listBox1.Items.Add(reader.GetString(2));
        listBox1.Items.Add(reader.GetString(3));
        listBox1.Items.Add(reader.GetString(4));
    }
}

reader.Close();
conn.Close();

Random random = new Random();
string[] words = { listBox1.Items.ToString() };
listBox4.Items.Add(words[random.Next(0, words.Length)]);

它不起作用。

1 个答案:

答案 0 :(得分:1)

假设您希望列表框中的项目按随机顺序排列,您可以将值读入字符串列表,随机化它们,然后将它们添加到列表框中。在答案中使用Shuffle方法:Randomize a List<T>它看起来像:

Com.CommandText = "SELECT * FROM search";
OleDbDataReader reader = Com.ExecuteReader();
var words = new List<string>();

while (reader.Read())
{
    if (string.Compare(label1.Text, reader.GetString(0)) == 0)
    {
        for (int i = 1 ; i < 5 ; i++)
        {
            words.Add(reader.GetString(i));
        }
    }
}
reader.Close();
conn.Close();

listbox1.Items.AddRange(words.ToArray());
words.Shuffle();
listbox4.Items.AddRange(words.ToArray());

将以下类添加到您的系统中(使用您的命名空间):

public static class ListExtensions
{
    public static void Shuffle<T>(this IList<T> list)  
    {  
        Random rng = new Random();  
        int n = list.Count;  
        while (n > 1) {  
            n--;  
            int k = rng.Next(n + 1);  
            T value = list[k];  
            list[k] = list[n];  
            list[n] = value;  
        }  
    }
}