0

aListView仮想モードの場合、イベントを通じて要求されたときに index に対応するListViewaを供給する責任があります。ListItemnOnRetrieveItem

私は自分のルールに従ってリストをソートし、リストビューに再描画するように指示します:

listView1.Invalidate();

それはいいですし、ダンディです。

ユーザーがいくつかの項目を選択した場合を除きます。ツリーが再描画されると、さまざまな項目が選択されるようになりました。

ソートするテクニックは何SelectedIndicesですか?

しかし、私が自分の個人的なリストを並べ替えると

4

1 に答える 1

1

選択したオブジェクトを保存し、並べ替え、新しいインデックスでオブジェクトを見つけて、再選択する必要があります。

コードは次のようになります (必要に応じて最適化してください)。

void listView1_ColumnClick( object sender, ColumnClickEventArgs args )
{
    // Store the selected objects
    List<MyDataObject> selectedObjects = new List<MyDataObject>();
    foreach ( int index in listView1.SelectedIndices )
    {
        selectedObjects.Add( m_MyDataObjectsColl[index] );
    }

    // Clear all selected indices
    listView1.SelectedIndices.Clear();

    // Sort the list
    SortListView(listView1, args);

    // Reselect the objects according to their new indices
    foreach ( MyDataObject selectedObject in selectedObjects )
    {
        int index = m_MyDataObjectsColl.FindIndex(
                delegate( MyDataObject obj ) { return obj == selectedObject; }
            );
        listView1.SelectedIndices.Add( index );
    }
}
于 2012-02-21T23:33:00.700 に答える