Como han dicho los demás, el evento SelectedIndexChanged
es lo que debe ver, sin embargo, debe usarlo en colaboración con el evento ItemSelectionChanged
. Aquí hay un código que acabo cociné:
// Holds the last selected index
private int _previousIndex = -1;
// Restores the previous selection if there are no selections
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedIndices.Count == 0)
{
if (_previousIndex >= 0)
{
listView1.SelectedIndices.Add(_previousIndex);
}
}
}
// Records the last selected index
private void listView1_ItemSelectionChanged(object sender,
ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
_previousIndex = e.ItemIndex;
}
}
Para fines de reutilización de código puro, que probablemente sea la pena poner este código en un nuevo control de usuario y tienen una propiedad que determina si se permite o no la última selección que se pierda:
public class CustomListView : ListView
{
protected CustomListView()
{
this.SelectedIndexChanged += new EventHandler(CustomListView_SelectedIndexChanged);
this.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(CustomListView_ItemSelectionChanged);
}
void CustomListView_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.MaintainLastSelection && this.SelectedIndices.Count == 0)
{
if (_previousIndex >= 0)
{
this.SelectedIndices.Add(_previousIndex);
}
}
}
void CustomListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
_previousIndex = e.ItemIndex;
}
}
private int _previousIndex = -1;
public bool MaintainLastSelection
{
get { return _maintainLastSelection; }
set { _maintainLastSelection = value; }
}
private bool _maintainLastSelection;
}
duplicado: http://stackoverflow.com/questions/2382369/prevent-listview-to-lose-selected-item – Marek
única Duplicar tema. Ese hilo no tiene una respuesta real. –
Y la respuesta updvoted más alta de ese subproceso es para WPF, esto es WinForms. – GenericTypeTea