PDA

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



madrid-poorya
سه شنبه 17 اردیبهشت 1392, 23:31 عصر
با سلام.من توسط این کد آیتم های لیست باکس رو بالا پایین میکنم و درست کار میکنه

public void MoveItem(int direction)
{
// Checking selected item
if (listBox1.SelectedItem == null || listBox1.SelectedIndex < 0)
return; // No selected item - nothing to do

// Calculate new index using move direction
int newIndex = listBox1.SelectedIndex + direction;

// Checking bounds of the range
if (newIndex < 0 || newIndex >= listBox1.Items.Count)
return; // Index out of range - nothing to do

object selected = listBox1.SelectedItem;

// Removing removable element
listBox1.Items.Remove(selected);
// Insert it in new position
listBox1.Items.Insert(newIndex, selected);
// Restore selection
listBox1.SetSelected(newIndex, true);
}

حالا به جای یک به یک Multiselect بود چطور باید اون آیتم هایی که انتخاب شده رو جا به جا کرد؟

Mahmoud.Afrad
چهارشنبه 18 اردیبهشت 1392, 00:54 صبح
به اینصورت بنویس:

private void MoveItem(int direction)
{
List<int> selectedIndexes = new List<int>();
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.GetSelected(i))
{
selectedIndexes.Add(i);
}
}
if (selectedIndexes.Count == 0)
return;

List<int> newIndexes = selectedIndexes.Select(i => i + direction).ToList();
int delta = 0;
int lastIndexOfListBox = listBox1.Items.Count - 1;
int lastIndexOfNewIndexes = newIndexes.Count - 1;
// if newIndexes less than 0 or bigger than lastIndexOfListBox
if (newIndexes[0] < 0)
{
delta = 0 - newIndexes[0];
}
else if (newIndexes[lastIndexOfNewIndexes] > lastIndexOfListBox)
{
delta = lastIndexOfListBox - newIndexes[lastIndexOfNewIndexes];
}
for (int i = 0; i < selectedIndexes.Count; i++)
{
newIndexes[i] += delta;
object selected = listBox1.Items[selectedIndexes[i]];
listBox1.Items.RemoveAt(selectedIndexes[i]);
listBox1.Items.Insert(newIndexes[i], selected);
listBox1.SetSelected(newIndexes[i], true);
}
}

delta هم برای اینه که اگر اندیس جدید منفی شد و یا از بزرگترین اندیس لیست باکس بیشتر شد میاد اندیس های جدید رو اصلاح میکنه تا از حدود اندیس های معتبر خارج نشه.

_behnam_
چهارشنبه 18 اردیبهشت 1392, 01:50 صبح
سلام.
اینم نمونه کد بنده

حرکت به سمت پایین

// method for moveDown
private void moveDown(int Index)
{
for (int indexFor = lbItems.SelectedItems.Count - 1; indexFor >= 0; indexFor--)
{
string items = lbItems.SelectedItems[indexFor].ToString();
// Checking selected item
if (lbItems.SelectedItem == null || lbItems.SelectedIndex < 0)
return; // No selected item - nothing to do

// Calculate new index using move direction
int newIndex = lbItems.Items.IndexOf(items) + Index;

// Checking bounds of the range
if (newIndex < 0 || newIndex >= lbItems.Items.Count)
return; // Index out of range - nothing to do


// Removing removable element
lbItems.Items.Remove(items);
// Insert it in new position
lbItems.Items.Insert(newIndex, items);
// Restore selection
lbItems.SetSelected(newIndex, true);
}
}
حرکت به سمت بالا

// method for moveup
private void moveUp(int Index)
{


for (int indexFor = 0; indexFor <= lbItems.SelectedItems.Count - 1; indexFor++)
{
string items = lbItems.SelectedItems[indexFor].ToString();
// Checking selected item
if (lbItems.SelectedItem == null || lbItems.SelectedIndex < 0)
return; // No selected item - nothing to do

// Calculate new index using move direction
int newIndex = lbItems.Items.IndexOf(items) - Index;

// Checking bounds of the range
if (newIndex < 0 || newIndex >= lbItems.Items.Count)
return; // Index out of range - nothing to do


// Removing removable element
lbItems.Items.Remove(items);
// Insert it in new position
lbItems.Items.Insert(newIndex, items);
// Restore selection
lbItems.SetSelected(newIndex, true);
}
}

اینم پروژه آماده

103852