2

これは正常に機能します。

private void btnDelete_Click(object sender, EventArgs e)
{
    for (int i = 0; i < listBox1.SelectedItems.Count; i++) 
    {
        listBox1.Items.Remove(listBox1.SelectedItems[i].ToString());
        i--;
    }
}

しかし、これは機能しません:

private void btnDelete_Click(object sender, EventArgs e)
{
    listBox1.Items.Remove(listBox1.SelectedItems);
}

2番目が機能しないのはなぜbtnDelete_Clickですか?つまり、マウスで行を選択してlistBox1からボタンを押します。.Remove関数は、選択した行を認識しませんか?私が言ったとしても、.Remove(listBox1.SelectedItem)それは必需品であり、selectedItem配列ですか?その言葉はSelectedItems自明ではありませんか?また、マウスで行をクリックしたlistBox1ので、プログラムまたはIDEがどの行が選択されているかを理解できませんか?なぜまだ使用する必要があるのSelectedItems[i]ですか?

4

5 に答える 5

1

また変更します

for (int i = 0; i < listBox1.SelectedItems.Count; i++) 
{
    listBox1.Items.Remove(listBox1.SelectedItems[i].ToString());
    i--;
}

    for (int i = (listBox1.SelectedItems.Count - 1); i >= 0; i--)
    { 
      listBox1.Items.Remove(listBox1.SelectedItems[i]);
    }

そしてこれは

 listBox1.Items.Remove(listBox1.SelectedItem);
于 2012-07-19T11:33:58.113 に答える
1

listBox1.SelectedItems選択したアイテムのコレクションを返します。アイテムを削除するにはRemove()、、またはコレクション内のオブジェクトへのインデックスを使用して、コレクション内の単一のオブジェクトのみを渡すことができますRemoveAt()

オブジェクトを削除します。

listBox1.Items.Remove(listBox1.SelectedItem);

インデックスでオブジェクトを削除します。

listBox1.Items.RemoveAt(5);

あなたが探しているものであるRemoveRange()メソッドはありません。

于 2012-07-19T11:32:10.653 に答える
1

SelectedItemsにはインデックス番号が必要だと思います。たぶんそれがあなたがどんなアイテムも削除できない理由です。

于 2012-07-19T11:29:07.063 に答える
1

ListBox.Items.Remove()アイテムのコレクションを返す間、 1つのアイテムが削除されることを期待します()-アイテムが1つだけ選択されている場合でも!ListBox.SelectedItemsSelectedObjectCollection

選択したすべてのアイテムを削除するための拡張メソッドを作成できます。

public static class ListBoxExtension
{
    public static void RemoveSelectedItems(this ListBox source)
    {
        if(source==null) return;
        while(source.SelectedItems.Count!=0)
        {
            source.Items.Remove(source.SelectedItems[0]);
        }
    }
}

これは次のように使用できます。

this.listbox1.RemoveSelectedItems();
于 2012-07-19T11:41:21.527 に答える
1

2番目の例が機能しない理由は、一度に削除するコレクションの形式で複数のアイテムを渡そうとしているためです。

アイテムを削除するには、一度に1つずつ実行する必要があるため、ループが必要になります。

また、ListView代わりに使用することをお勧めしますか?個人的には、もっと多くのオプションを使用すると使いやすいと思います。

たとえば、ListViewこれだけでループを作成できます

foreach (ListViewItem item in listView1.SelectedItems)
{
    item.Remove();
}

選択したアイテムを一度に1つだけ削除しようとしている場合は、

listBox1.Items.Remove(listBox1.SelectedItem);

SelectedItemではなくSelectedItems、複数形はループなしでは処理できないコレクションであり、単数形は理解できる単一のアイテムです。

于 2012-07-19T11:59:25.237 に答える