使用 Visual Studio 2008、.Net 3.5
我有一个 ListView 加载了一堆项目。我有一个用于删除项目的右键单击弹出窗口。删除一个项目后,我通过重新访问我的主要数据重新绘制列表视图,并重置所选项目。但是,所选项目不会显示为selected。
代码的想法:
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.
}
如果我执行上述操作,除非我重新调整列大小或排序,否则所选项目永远不会在视觉上显示为选中状态(没有背景颜色更改)。然后它显示为选中。但是,如果我使用调试器或添加按钮以使用消息框向我显示所选项目,则该项目知道它已被选中。
我知道这是某种刷新/绘图问题 - 有什么想法吗?