لیست باکسی دارم که 100 آیتم دارد. می خواهم وقتی روی باتن کلیک کردم آیتم ها بصورت نامرتب و تصادفی یعنی همان رندم نمایش داده شوند. یعنی همان 100 آیتم در لیست باکس قرار بگیرد ولی جای آیتم ها تغییر کند بصورت رندم. لطفا راهنمایی کنید. با تشکر
لیست باکسی دارم که 100 آیتم دارد. می خواهم وقتی روی باتن کلیک کردم آیتم ها بصورت نامرتب و تصادفی یعنی همان رندم نمایش داده شوند. یعنی همان 100 آیتم در لیست باکس قرار بگیرد ولی جای آیتم ها تغییر کند بصورت رندم. لطفا راهنمایی کنید. با تشکر
سلام
این پست رو نگاه کنید. روش به این صورت هست که اول یه لیست از نوع string می سازید بعد با یه حلقه تمام آیتم های لیست باکس رو در این لیست می ریزید. حالا متدی که تو این پست هست رو اجرا می کنید بعد لیست باکس را خالی میکنید و در آخر تمام آیتم هایی که توی لیست هست رو به لیست باکس اضافه می کند.
اینجوری نوشتم ولی خطا داد :
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;
}
}
private void BtnRandomLstOut1_Click(object sender, EventArgs e)
{
List<ListBox> lst = new List<ListBox>();
for (int i = 0; i < LstOut1.Items.Count; i++)
{
// lst.Add(LstOut1.SelectedItem[i].ToString());
lst.Add(LstOut1);
}
lst.Shuffle();
int _number = 0;
foreach (Button btn in lst)
{
btn.Text = _number.ToString();
_number++;
}
}
این تیکه رو باید چی بنویسم ؟
List<ListBox> lst = new List<ListBox>(); for (int i = 0; i < LstOut1.Items.Count; i++)
{
lst.Add(LstOut1.Items[i].ToString);
}
لیستی که ساختید باید از نوع string باشه چون قراره متن آیتم های لیست باکس رو توش ذخیره کنید نه خود لیست باکس رو!
این کل کد:
List<string> lst = new List<string>();
for (int i = 0; i < listBox1.Items.Count; i++)
{
lst.Add(listBox1.Items[i].ToString());
}
Shuffle(lst);
//
listBox1.Items.Clear();
foreach (string s in lst)
{
listBox1.Items.Add(s);
}
به این شکل هم نوشتم باز کاری انجام نداد
private void BtnRandomLstOut1_Click(object sender, EventArgs e)
{
List<string> lst = new List<string>();
for (int i = 0; i < LstAll.Items.Count; i++)
{
lst.Add(LstAll.Items[i].ToString());
}
MyExtensions.Shuffle(lst);
//
LstAll.Items.Clear();
foreach (string s in lst)
{
LstAll.Items.Add(s);
}
}
من الان 5 تا اسم دارم توی لیست باکس . میخواهم وقتی که روی باتن کلیک کردم جای این 5 تا اسم تغییر کند . و هر بار بر روی باتن کلیک کردم باز مجدد بصورت رندم جای آیتم ها تغییر کند.
من لیست باکس رو اشتباه می نوشتم. با این کد مشکل حل شد . متشکرم
List<string> lst = new List<string>();
for (int i = 0; i < LstOut1.Items.Count; i++)
{
lst.Add(LstOut1.Items[i].ToString());
}
MyExtensions.Shuffle(lst); // به تابع شافل از کلاس مربوطه منتقل می کند
LstOut1.Items.Clear();
foreach (string s in lst)
{
LstOut1.Items.Add(s);
}