Visual Studio 2008、.Net3.5を使用する
たくさんのアイテムがロードされたListViewがあります。アイテムを削除するための右クリックポップアップがあります。アイテムを削除した後、プライマリデータに再度アクセスしてリストビューを再描画し、選択したアイテムをリセットします。ただし、選択したアイテムは選択済みとして表示されません。
コードのアイデア:
public ListView m_lv;
public MyDataCollection m_Data; // Has a function to get data based on a tag.
public void RemoveEventHandler(object sender, EventArgs e)
{
int iSelectedItem= m_lv.FocusedItem.Index;
int iDataIndexToRemove= m_Data.GetIndexOf(m_lv.FocusedItem.Tag.ToString());
m_Data.RemoveAt(iDataIndexToRemove); // Remove the item.
if(0 != m_lv.Items.Count)
{
if(iSelectedItem == m_Data.Items.Count) // Removed last.
iSelectedItem= m_Data.Items.Count - 1;
}
m_lv.Items.Clear(); // Clear the list view items.
// Completely rebuild the list view.
foreach(MyData md in m_Data)
{
ListViewItem lvi= new ListViewItem(md.Column0.ToString());
lvi.SubItems.Add(md.Column1.ToString());
lvi.SubItems.Add(md.Column3.ToString());
lvi.SubItems.Add(md.Column4.ToString());
m_lv.Items.Add(lvi);
}
// Set up tags, column sizes, etc.
if(0 != m_lv.Items.Count)
m_lv.Items[iSelectedItem].Selected= true; // Set the selection.
}
上記のようなことをすると、列のサイズを変更したり並べ替えたりしない限り、選択したアイテムが選択したものとして視覚的に表示されることはありません(背景色の変更はありません)。次に、選択済みとして表示されます。ただし、デバッガーを使用するか、ボタンを追加してメッセージボックスを使用して選択したアイテムを表示すると、アイテムは選択されていることを認識します。
私はそれが何らかのリフレッシュ/描画の問題であることを知っています-何かアイデアはありますか?