我的Windows窗体包含两个列表框。 Listbox1中包含一些项目,listbox2为空。当我按下表单上的按钮时,应从Listbox1中删除listbox1中的多个选定项目并将其复制到Listbox2。
我尝试使用listbox1.SelectedItems上的foreach循环,但它只从列表中删除了1个项目。
任何人都有解决方案或代码吗?
答案 0 :(得分:19)
你可以在一个循环中完成所有操作。你应该在SelectedIndices上使用一个简单的for和loop:
private void button1_Click(object sender, EventArgs e)
{
for(int x = listBox1.SelectedIndices.Count - 1; x>= 0; x--)
{
int idx = listBox1.SelectedIndices[x];
listBox2.Items.Add(listBox1.Items[idx]);
listBox1.Items.RemoveAt(idx);
}
}
答案 1 :(得分:2)
您必须存储要在其他位置删除的值,然后从列表中删除它们,以下是示例代码:
private void button1_Click(object sender, EventArgs e)
{
ArrayList tmpArr = new ArrayList();
foreach (object obj in listBox1.SelectedItems)
{
listBox2.Items.Add(obj);
tmpArr.Add(obj);
}
foreach (object obj in tmpArr.ToArray())
{
listBox1.Items.Remove(obj);
}
}
答案 2 :(得分:2)
我使用CopyTo方法将项目复制到数组中所选项目的计数长度,然后在该数组中循环移除ListBox1中的每个相应项目。
private void button1_Click(object sender, EventArgs e)
{
object[] itemsToRemove = new object[listBox1.SelectedItems.Count];
listBox1.SelectedItems.CopyTo(itemsToRemove, 0);
foreach (object item in itemsToRemove)
{
listBox1.Items.Remove(item);
listBox2.Items.Add(item);
}
}
答案 3 :(得分:0)
对于VS2005我使用类似于我无法使用的东西.selectedIndices
for (int i = ListBox1.Items.Count - 1; i >= 0; i--)
{
if (ListBox1.Items[i].Selected)
{
ListBox2.Items.Add(ListBox1.Items[i]);
ListBox1.Items.Remove(ListBox1.Items[i]);
}
}
答案 4 :(得分:0)
// all are valid!
void ((a))(); // void a();
int (a); // int a;
struct S {
(S)(); // constructors
(~S)(); // destructors
};
它的作品。
答案 5 :(得分:0)
这是我的方法:
List<String> arr = new List<string>();
private void btnAdd_Click(object sender, EventArgs e)
{
arr.Add(txtItem.Text);
lstItem.DataSource = arr.ToArray();
txtItem.Focus();
}
//When i delete
private void btnRemove_Click(object sender, EventArgs e)
{
foreach (string item in lstItem.SelectedItems)
{
arr.Remove(item);
}
lstItem.DataSource = arr.ToArray();
}