معکوس کردن عناصر داخل یک Listbox در سی شارپ
سر و ته کردن آیتم های لیست باکس در واقع نوعی مرتب سازی است مثل نحوه مرتبسازی موارد ListBox به ترتیب نزولی (یا کاهشی) با استفاده از ArrayList .
روش اول
اگر به دنبال مرتب سازی هستید از این قطعه کد استفاده کنید :
نکته آیتم ها ممکن است با یک refresh به حالت اول برگردند.
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
private void Form1_Load(object sender, EventArgs e) { listBox1.Items.Add("C#"); listBox1.Items.Add("Java"); listBox1.Items.Add("C++"); listBox1.Items.Add("Python"); listBox1.Items.Add("Pascal"); listBox1.Items.Add("Delphi"); listBox1.Items.Add("Visual Basic"); } private void button1_Click(object sender, EventArgs e) { ArrayList list = new ArrayList(); foreach(object o in listBox1.Items) { list.Add(o); } list.Sort(); list.Reverse(); listBox1.Items.Clear(); foreach (object o in list) { listBox1.Items.Add(o); } }
روش دوم
متد معکوس در واقع یک روشی است که از توابع Linq می آید. در واقع مجموعه اصلی آیتم ها را اصلاح نمی کند، اما مجموعه جدیدی از آیتم ها را به ترتیب معکوس نشان می دهد، برمی گرداند.
listBox.Items.Insert(0, stackPanel1); listBox.Items.Insert(0, stackPanel2); // inserts stackPanel2 before stackPanel1 listBox.Items.Insert(0, stackPanel3); // inserts stackPanel3 before stackPanel2
یا در صورت امکان، فقط آنها را به ترتیب معکوس اضافه کنید:
listBox.Items.Add(stackPanel3); listBox.Items.Add(stackPanel2); listBox.Items.Add(stackPanel1);
اگر برای همیشه می خواهید معکوس بمانند
از قطعه کد زیر استفاده کنید :
for (int i = 0; i < listBox.Items.Count / 2; i++) { var tmp = listBox.Items[i]; listBox.Items[i] = listBox.Items[listBox.Items.Count - i - 1]; listBox.Items[listBox.Items.Count - i - 1] = tmp; }
روش سوم
private void sortListBoxItems(ref ListBox lb, bool ascending) { List<object> items; items = lb.Items.OfType<object>().ToList(); lb.Items.Clear(); if (ascending) { lb.Items.AddRange(items.OrderBy(i => i).ToArray()); } else { lb.Items.AddRange(items.OrderByDescending(i => i).ToArray()); } }
روش چهارم
اگر نوعی شی قابل مرتبسازی داشتید، میتوانید از linq و OrderByDescending استفاده کنید.
List<int> yourItems = new List<int>(); int thingsforlist = 0; do { yourItems.Add(thingsforlist); thingsforlist += 3; } while (thingsforlist <= 39); listbox.DataSource = yourItems.OrderByDescending(i => i); listbox.DataBind();
کدهای بیشتر - سی شارپ
حذف ردیف یا سطر از DataTable در سی شارپ #C
1 Comments