Actualmente estoy trabajando en una vista de lista en winform C# y cada vez que hago clic en un espacio vacío en la vista de lista, se pierde el elemento seleccionado.evitar que la vista de lista pierda el elemento seleccionado
Respuesta
Pensé que había una propiedad que impedía que esto sucediera, pero ahora no puedo encontrarla.
Usted podría intentar esto:
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListView listView = sender as ListView;
if (listView.SelectedItems.Count == 0)
foreach (object item in e.RemovedItems)
listView.SelectedItems.Add(item);
}
Esto solo funcionará en WPF. – Grammarian
@Grammarian: la pregunta no especificaba si era WPF, WinForms, ASP, Silverlight o cualquier otra cosa. Acabo de responder con la que tuve abierto en el IDE en este momento. ¡Debería publicar una respuesta con su tecnología de visualización C# favorita! :-) –
de hecho su derecho. está en winforms – EdgarGad
Esto es mucho más difícil de hacer en Windows Forms que en WPF. WinForms tiene un evento SelectedIndexChanged
que no le dice nada acerca de lo que ya estaba seleccionado, más se activa cada vez que se selecciona o deselecciona una fila.
lo tanto, si se selecciona una fila y se selecciona una fila diferente, recibe dos eventos: SelectedIndexChanged
- una después de la fila seleccionada no está seleccionada
- otra cuando se selecciona la nueva fila.
El problema es que, durante el evento # 1, el ListView no tiene nada seleccionado y no sabe si el evento # 2 que viene seleccionará la segunda fila.
Lo mejor que puede hacer es esperar hasta que su aplicación esté inactiva (algunos milisegundos después de que la selección haya cambiado), y si la vista de lista todavía no tiene nada seleccionado, vuelva a colocar la última fila seleccionada.
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
ListView lv = (ListView)sender;
if (lv.SelectedIndices.Count == 0)
{
if (!this.appIdleEventScheduled)
{
this.appIdleEventScheduled = true;
this.listViewToMunge = lv;
Application.Idle += new EventHandler(Application_Idle);
}
}
else
this.lastSelectedIndex = lv.SelectedIndices[0];
}
void Application_Idle(object sender, EventArgs e)
{
Application.Idle -= new EventHandler(Application_Idle);
this.appIdleEventScheduled = false;
if (listViewToMunge.SelectedIndices.Count == 0)
listViewToMunge.SelectedIndices.Add(this.lastSelectedIndex);
}
private bool appIdleEventScheduled = false;
private int lastSelectedIndex = -1;
private ListView listViewToMunge;
he logrado de esta manera:
private void lvReads_MouseUp(object sender, MouseEventArgs e)
{
if (lvReads.SelectedItems.Count == 0)
if (lvReads.Items.Count > 0)
lvReads.Items.Find(currentName, false)[0].Selected = true;
}
y
private void lvReads_SelectedIndexChanged(object sender, EventArgs e)
{
if (lvReads.SelectedItems.Count == 1)
{
selectedIndex = lvReads.SelectedIndices[0];
if (currentName != lvReads.Items[selectedIndex].Name)
{
//load item
}
currentName = lvReads.Items[selectedIndex].Name;
}
}
Esta es una solución efectiva con un código mínimo. – hfann
Usted tiene que heredar de la clase ListView y hacer algo de procesamiento de mensajes de bajo nivel
class ListViewThatKeepsSelection : ListView
{
protected override void WndProc(ref Message m)
{
// Suppress mouse messages that are OUTSIDE of the items area
if (m.Msg >= 0x201 && m.Msg <= 0x209)
{
Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);
var hit = this.HitTest(pos);
switch (hit.Location)
{
case ListViewHitTestLocations.AboveClientArea:
case ListViewHitTestLocations.BelowClientArea:
case ListViewHitTestLocations.LeftOfClientArea:
case ListViewHitTestLocations.RightOfClientArea:
case ListViewHitTestLocations.None:
return;
}
}
base.WndProc(ref m);
}
}
La misma respuesta aquí: http://stackoverflow.com/a/3255191/188926 – Dunc
El control de vista de lista tiene un HideSelection
propiedad que por defecto es True
. Hazlo False
y estás listo para ir ... en algunos casos esto es suficiente.
Esto no soluciona el problema publicado, no está teniendo problemas con los elementos que anulan la selección cuando pierde el foco. – Hugoagogo
Corrección: * tiene un problema con la anulación de la selección de elementos.Los elementos seleccionados no se resaltan porque el control pierde qué elementos se seleccionan. – Suncat2000
- 1. Android: Vista en lista Elemento seleccionado -1
- 2. auto_complete_for: evitar que el primer elemento sea seleccionado automáticamente
- 3. Windows 7: evitar que la aplicación pierda el foco
- 4. ¿Cómo puedo evitar que CompileAssemblyFromSource pierda memoria?
- 5. ¿Actualizar vista de lista para que muestre el índice seleccionado?
- 6. Obtener el elemento seleccionado al hacer doble clic en el elemento de vista de lista
- 7. MVC3 Lista desplegable que no selecciona el elemento seleccionado
- 8. destacando el elemento seleccionado en la vista de lista en android
- 9. Cómo evitar winforms icono de vista en árbol cambia cuando el elemento seleccionado
- 10. Vista de lista C# permanecer seleccionado
- 11. Android: configuración de un elemento de vista de lista cliqueado programáticamente en el estado seleccionado
- 12. Cómo evitar que WPF DataGrid anule la selección de elemento seleccionado cuando se actualizan los elementos?
- 13. Establecer el título del menú contextual del elemento de vista de lista seleccionado
- 14. La vista de re-rendering hace que la entrada pierda el foco
- 15. ASP.Net Html.DropDownList Elemento seleccionado no seleccionado
- 16. Lista desplegable QComboBox - establecer el estilo de elemento seleccionado
- 17. Barra emergente en el elemento de lista seleccionado
- 18. android listview obtener el elemento seleccionado
- 19. Recuperando el elemento seleccionado de la ruleta?
- 20. Android: establecer lista ver el elemento como "seleccionado" (resaltado)
- 21. Cómo extraer el texto del elemento seleccionado en la listaVer
- 22. ¿Cómo resaltar el elemento seleccionado en ListView?
- 23. Establecer el elemento desplegable seleccionado MVC
- 24. ¿Cómo hacer que el elemento no pierda el foco cuando se presiona el botón?
- 25. DataBind cuadro de lista elemento seleccionado a cuadros de texto
- 26. ¿Cómo obtener el elemento seleccionado de ListView?
- 27. Ajustar vista de lista al elemento
- 28. Valor seleccionado de la lista desplegable en el evento Selectedindexchanged
- 29. C# conjunto de cuadro de lista elemento seleccionado
- 30. Los rieles 3 forman ayuda para evitar que el usuario se desplace y pierda los cambios?
WinForms o WPF? ¿Espacio vacío a la derecha o abajo? ¿Qué es lo que desea que suceda? – Grammarian
posible duplicado de [No permitir que ListView tenga cero elementos seleccionados] (http://stackoverflow.com/questions/3255046/disallow-listview-to-have-zero-selected-items) –
en propiedades ... HideSelection = False and FullRowSelect = True –