PDA

View Full Version : سوال: نامرتب کردن آیتم های لیست باکس



dele_ghamgin_2008
چهارشنبه 28 مرداد 1394, 15:58 عصر
لیست باکسی دارم که 100 آیتم دارد. می خواهم وقتی روی باتن کلیک کردم آیتم ها بصورت نامرتب و تصادفی یعنی همان رندم نمایش داده شوند. یعنی همان 100 آیتم در لیست باکس قرار بگیرد ولی جای آیتم ها تغییر کند بصورت رندم. لطفا راهنمایی کنید. با تشکر

Mahmoud Zaad
چهارشنبه 28 مرداد 1394, 16:52 عصر
سلام
این پست (http://barnamenevis.org/showthread.php?494457-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA-%D8%AF%DA%A9%D9%85%D9%87-%D9%87%D8%A7-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%B1%D9%86%D8%AF%D9%88%D9%85&p=2210123&viewfull=1#post2210123) رو نگاه کنید. روش به این صورت هست که اول یه لیست از نوع string می سازید بعد با یه حلقه تمام آیتم های لیست باکس رو در این لیست می ریزید. حالا متدی که تو این پست هست رو اجرا می کنید بعد لیست باکس را خالی میکنید و در آخر تمام آیتم هایی که توی لیست هست رو به لیست باکس اضافه می کند.

dele_ghamgin_2008
چهارشنبه 28 مرداد 1394, 17:49 عصر
سلام
این پست (http://barnamenevis.org/showthread.php?494457-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA-%D8%AF%DA%A9%D9%85%D9%87-%D9%87%D8%A7-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%B1%D9%86%D8%AF%D9%88%D9%85&p=2210123&viewfull=1#post2210123) رو نگاه کنید. روش به این صورت هست که اول یه لیست از نوع 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++;
}
}

dele_ghamgin_2008
چهارشنبه 28 مرداد 1394, 18:08 عصر
این تیکه رو باید چی بنویسم ؟
List<ListBox> lst = new List<ListBox>(); for (int i = 0; i < LstOut1.Items.Count; i++)
{
lst.Add(LstOut1.Items[i].ToString);
}

Mahmoud Zaad
چهارشنبه 28 مرداد 1394, 19:28 عصر
لیستی که ساختید باید از نوع 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);
}

dele_ghamgin_2008
شنبه 31 مرداد 1394, 15:48 عصر
لیستی که ساختید باید از نوع 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);
}

الان خط زیر رو ارور میده. این خط چیه ؟

Shuffle(lst);

dele_ghamgin_2008
شنبه 31 مرداد 1394, 15:56 عصر
به این شکل هم نوشتم باز کاری انجام نداد

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 تا اسم تغییر کند . و هر بار بر روی باتن کلیک کردم باز مجدد بصورت رندم جای آیتم ها تغییر کند.

dele_ghamgin_2008
شنبه 31 مرداد 1394, 16:33 عصر
من لیست باکس رو اشتباه می نوشتم. با این کد مشکل حل شد . متشکرم


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);
}