todos texto teclas teclado seleccionar para los contiguo con como comandos archivos c# .net listview keyboard-shortcuts

c# - texto - seleccionar todo en word 2016



¿Agregar un método abreviado seleccionar todo(Ctrl+A) a una vista de lista.net? (5)

Como dice el sujeto, tengo una vista de lista y quería agregar Ctrl + A y seleccionar todo el acceso directo. Mi primer problema es que no puedo averiguar cómo seleccionar todos los elementos en una vista de lista mediante programación. Parece que debería ser relativamente fácil, como ListView.SelectAll() o ListView.Items.SelectAll() , pero ese no parece ser el caso. Mi siguiente problema es cómo definir el método abreviado de teclado para el ListView . ¿Lo hago en un evento de KeyUp , pero luego, cómo verificas dos pulsaciones a la vez? ¿O es una propiedad que usted establece?

Cualquier ayuda aquí sería genial.


Esto funciona para listas pequeñas, pero si hay 100,000 artículos en una lista virtual, esto podría llevar mucho tiempo. Probablemente esto sea una exageración para sus propósitos, pero por si acaso:

class NativeMethods { private const int LVM_FIRST = 0x1000; private const int LVM_SETITEMSTATE = LVM_FIRST + 43; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct LVITEM { public int mask; public int iItem; public int iSubItem; public int state; public int stateMask; [MarshalAs(UnmanagedType.LPTStr)] public string pszText; public int cchTextMax; public int iImage; public IntPtr lParam; public int iIndent; public int iGroupId; public int cColumns; public IntPtr puColumns; }; [DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Auto)] public static extern IntPtr SendMessageLVItem(IntPtr hWnd, int msg, int wParam, ref LVITEM lvi); /// <summary> /// Select all rows on the given listview /// </summary> /// <param name="list">The listview whose items are to be selected</param> public static void SelectAllItems(ListView list) { NativeMethods.SetItemState(list, -1, 2, 2); } /// <summary> /// Deselect all rows on the given listview /// </summary> /// <param name="list">The listview whose items are to be deselected</param> public static void DeselectAllItems(ListView list) { NativeMethods.SetItemState(list, -1, 2, 0); } /// <summary> /// Set the item state on the given item /// </summary> /// <param name="list">The listview whose item''s state is to be changed</param> /// <param name="itemIndex">The index of the item to be changed</param> /// <param name="mask">Which bits of the value are to be set?</param> /// <param name="value">The value to be set</param> public static void SetItemState(ListView list, int itemIndex, int mask, int value) { LVITEM lvItem = new LVITEM(); lvItem.stateMask = mask; lvItem.state = value; SendMessageLVItem(list.Handle, LVM_SETITEMSTATE, itemIndex, ref lvItem); } }

y lo usas así:

NativeMethods.SelectAllItems(this.myListView);


La primera solución no funcionará si el usuario libera primero la tecla Ctrl .

Deberías usar el evento KeyDown lugar:

private void listView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.A && e.Control) { listView1.MultiSelect = true; foreach (ListViewItem item in listView1.Items) { item.Selected = true; } } }


No pude comentar sobre la primera pregunta, sin embargo, la solución con KeyDown no funciona para mí, porque el sistema reacciona de inmediato con LeftCtrl presionado y omite CTRL + A. Desde el otro lado KeyUp funciona correctamente.

private void listView1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.A && e.Control) { listView1.MultiSelect = true; foreach (ListViewItem item in listView1.Items) { item.Selected = true; } } }


Podrías lograr ambos con algo como esto:

private void listView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.A && e.Control) { listView1.MultiSelect = true; foreach (ListViewItem item in listView1.Items) { item.Selected = true; } } }


private void listView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == (Keys.A | Keys.Control)) foreach (ListViewItem item in listView1.Items) item.Selected = true; }

Para hacerlo solo en Ctrl + A, no en otras combinaciones como Ctrl + Shift + A etc.