0

チェックボックスでObjectListViewを使用しています。選択したアイテムに対して関数を実行して削除したいと思います。だから私はこの方法を試しましたが、うまくいきませんでした:

private List<Matricule> matrs;
private void button1_Click(object sender, EventArgs e)
        {
            //List<Song> s = this.olvSongs.CheckedObjects.Count;
            //MessageBox.Show(this.olvSongs.CheckedItems.Count + "  " + this.olvSongs.CheckedObjects.Count);

            string s = "";
            foreach (var item in olvMatrs.SelectedItems)
            {
                matrs.Remove((Matricule)item);
            }
this.olvSongs.SetObjects(matrs);
        }

どうすればこのタスクを実行できますか。

4

2 に答える 2

2

あなたはチェックボックスについて話します。この線

foreach (var item in olvMatrs.SelectedItems)

CHECKED ではなく、SELECTED であるアイテムを繰り返します。それは本当にあなたが望むものですか?CHECKED OBJECTS を取得するには

objectListView1.CheckedObjects

本当に SELECTED OBJECTS を取得したい場合は、Selected*Items* を使用しないでください。使用する

objectListView1.SelectedObjects;

代わりは。それがOLVのすべてです。ListViewItems ではなく、オブジェクトを操作したい。

何を削除するかを決定した場合は、リストからオブジェクトを削除するのではなく、 ObjectListView から直接削除します

objectListView1.RemoveObjects(myObjects);

おそらくこれを (再) 読む必要があります。特に、「メンタル ギア シフト - これは重要です。これを理解する必要があります。」のセクション。

于 2013-11-14T08:50:48.913 に答える
1

ええと、何かを追加するコードが表示されていないことがわかりました。そのため、有用なソース コードが不足していることは確かです。また、マトリキュールが何であるかはわかりませんが、あなたがすでに共有したものからかなり推測できます.

matrs でアイテムが削除されない場合、3 つのうちの 1 つが起こっているに違いないと思います。

1: 関数がボタンのクリック イベントに関連付けられていることは確かですか? 関数にブレークポイントを設定して、関数が実行されていることを確認できます。MessageBox.Show("Yes", this.Text);または、その button1_Click() メソッド内にメッセージボックスを表示する行を追加できます。

2:機能が実行されている場合(オプション#1ではない)、私の2番目の考慮事項は、(Matricule)item削除できるようにするために、おそらくmatrsリストにないことです。その削除関数は、削除によって実際に何かが削除されたかどうかを示すブール値を返します。

3: 削除されていないこと、実際に起こっていることは実際には削除されているが、新しく更新されたリストが表示されていないことですか?

#2だと思うかもしれませんが、最初に他の2つのより簡単なオプション(#1と#3)の可能性を排除したいと思うかもしれません. #2であると推測した場合、オプション#1と#3は発生していません。これらのオブジェクトを参照してオブジェクトを削除すると、問題が発生しやすくなります。あるオブジェクトにある別のオブジェクトと同じプロパティを持つ新しいオブジェクトを実際に削除しようとするコードを作成するのはとても簡単です。List. これを解決するきれいな方法は、オブジェクト自体への参照ではなく、インデックス # でアイテムを削除しようとすることです。ただし、リスト自体から削除するオブジェクトを取得することさえしていません。別のオブジェクト リストである olvMatrs からそのオブジェクトを取得しています。あなたが共有した情報からの私の最善の推測は、これが機能していない理由であり、より深く見ると、リストにないオブジェクトを削除しようとしているため、何も削除されていないということです。犯しやすい間違いです。私はこれについて非常に注意することを学ぶ前に私もそれをやったので、私は知っています.

于 2013-11-13T15:51:29.270 に答える