Intervalos múltiples portapapeles (8 / 9 paso)

Paso 8: Codificación de los eventos

En este paso tenemos que introducir el código para los eventos de los botones

y ListView. Estos eventos son genéricos, lo que significa que todos los controles generados dinámicamente llamará a estos eventos. Así, para saber qué ranura llamado el evento vamos a leer la propiedad Tag del control, que contiene el índice correcto de la aClipboardSlotData de la matriz.

Vamos a comenzar con el evento que maneja el doble clic en ListView. Cuando el usuario haga doble clic en un ListViewItem debemos demostrar un cuadro de mensaje con el contenido de los elementos seleccionados.

Si el SelectedIndex de la propiedad ListView es mayor que -1 que esto significa que se selecciona un elemento y será utilizar el valor de esta propiedad como un índice para el arreglo de discos que almacenan los datos del portapapeles (aClipboardSlotData). El código siguiente muestra el contenido del método delegado lstData_MouseDoubleClick().

void lstData_MouseDoubleClick (objeto sender, MouseButtonEventArgs e)

{

Lista v = (ListView) sender;

Índice de int = Convert.ToInt32(v.Tag);

Si (v.SelectedIndex! = -1)

MessageBox.Show (aClipboadSlotData [index]. ElementAt(v.SelectedIndex). ToString());

}

El siguiente método de delegado, que tenemos que crear es el evento que la haga clic en el botón Copiar. Copy_Click() llama a este método de delegado y necesitamos primero la ventana de código activa con el método de GetActiveView() creado en el paso 6 y comprobar si la visión es la correcta.

A continuación, debemos leer el texto seleccionado actual con el método de GetTextForPastie() que también fue creado en el paso 6. Después de recibir el texto que necesitamos comprobar si está vacía.

Si el texto seleccionado no está vacío, deberemos insertar en el array aClipboardSlotData. Realizamos esta inserción en un nuevo método llamado InsertDataHistory(). Por último, debemos actualizar el ListView utilizando otro método nuevo llamado AccomodateDataListView(). Pero primero veamos el código para el Copy_Click() delegado de método.

void Copy_Click (objeto sender, RoutedEventArgs e)

{

int index = Convert.ToInt32(((Button)sender). Etiqueta);

vista = GetActiveTextView();

Si (! () this.View == null || MultiSlotClipboardPackage.thePackage.Dte.ActiveDocument == null))

{

String sData = GetTextForPastie(view);

Si (sData! = "")

{

InsertDataHistory (index, sData);

AccomodateDataListView(index);

}

}

}

La Copy_Click() comienza por leer el valor de la propiedad Tag del botón que se hizo clic. Esta propiedad contiene el índice que vamos a utilizar como el número de ranura. A continuación llame al método GetActiveTextView() y compruebe el valor devuelto para ver si tenemos la ventana correcta.

Las siguientes líneas de código Obtén el texto seleccionado con el método GetTextForPastie(). Entonces comprobamos si hay cualquier texto seleccionado y si llamamos al método InsertDataHistory() para insertar los datos en la matriz aClipboardSlotData. Por último, cambiamos los elementos del ListView con el método AccomodateDataListView().

El método InsertDataHistory() tiene un trabajo sencillo. En primer lugar, que recibe el índice de la ranura del portapapeles y el texto seleccionado. Luego debe insertar el texto seleccionado en la primera posición de la matriz aClipboardSlotData, que debería funcionar como una pila o una estructura de datos LIFO (http://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29).

En lugar de implementar una estructura de datos pila desde cero solo creamos una nueva lista e insertar el valor de texto seleccionado enviado como un parámetro en su primera posición. A continuación, atraviesa la matriz existente de aClipboardSlotData a partir del segundo elemento y colocar los datos en la nueva lista. Finalmente, reemplaza la lista existente en aClipboardSlotData con el que acabamos de crear. El código siguiente muestra cómo se realizan estas operaciones.

privado void InsertDataHistory (int indexSlot, String sData)

{

Lista de list_temp = new List();

list_temp. Insertar (0, sData);

para (int i = 0; i < aClipboadSlotData [indexSlot]. Count - 1; i ++)

{

list_temp. Insertar (i + 1, aClipboadSlotData [indexSlot]. ElementAt(i). ToString());

}

aClipboadSlotData [indexSlot]. RemoveRange (0, aClipboadSlotData [indexSlot]. Cuenta);

aClipboadSlotData [indexSlot]. InsertRange (0, list_temp);

retorno;

}

Ahora que hemos insertado el texto seleccionado en la posición correcta de la lista almacenada dentro de la matriz de aClipboardSlotData debemos actualizar los elementos de ListView. Lo hacemos dentro del método AccomodateDataListView() que recibe el índice de la matriz como un parámetro.

El AccomodateDataListView() es sencillo: nos borra todos los elementos de ListViewItem e inserta los nuevos en el orden de la lista almacenada dentro de la aClipboardSlotData. Asegúrese de insertar sólo 15 caracteres de cada texto para evitar cortan el texto. Finalmente, pedimos una actualización en la interfaz de usuario y seleccione el primer elemento del ListView.

privado void AccomodateDataListView (int indexSlot)

{

Lista v = aGroupGrids (ListView) [indexSlot]. Niños [2];

v.Items.Clear();

foreach (String s en aClipboadSlotData[indexSlot])

{

Si (! s.Equals(""))

{

Si (15 > s.Length)

v.Items.Add (s.Substring (0, 15));

otra cosa

v.Items.Add(s);

}

}

v.Items.Refresh();

v.SelectedIndex = 0;

}

Ya casi terminamos. Tenemos que crear el código para los eventos que manejan la haga clic en el corte y los botones de pasta. El evento para el botón de corte es casi lo mismo que el botón de copia: la única diferencia es que después de recibir el texto seleccionado necesita para borrar el texto que está seleccionado en la ventana de código y eliminar selección del texto.

Para borrar el texto seleccionado debemos utilizar el objeto que implementa la interfaz ITextEdit. Obtenemos este objeto al método CreateEdit() de la propiedad de TextBuffer que se encuentran en la variable ver que representa la vista actual del editor de código. Una vez que el objeto de ITextEdit utilizamos el método Delete() para borrar los caracteres y el método Apply() para cambiar el texto. Por último, quitamos la selección utilizando el método Clear() de la propiedad de la selección de la vista.

Pero hay un retén cuando se utiliza el método Delete(): debemos proporcionar la posición que queremos empezar a borrar los caracteres y los caracteres cuántos tenemos que eliminar. Para obtener la posición de la selección actual utilizamos la propiedad Position de la propiedad Selection.Start, que representa el lugar de inicio donde comienza la selección. De manera similar, usamos la propiedad Selection.End para conseguir el puesto entero exacto del final de la selección. Continuación se muestra el código para el método de delegado Cut_Click().

void Cut_Click (objeto sender, RoutedEventArgs e)

{

int index = Convert.ToInt32(((Button)sender). Etiqueta);

vista = GetActiveTextView();

Si (! () this.View == null || MultiSlotClipboardPackage.thePackage.Dte.ActiveDocument == null))

{

String sData = GetTextForPastie(view);

Si (sData! = "")

{

InsertDataHistory (index, sData);

AccomodateDataListView(index);

Editar Microsoft.VisualStudio.Text.ITextEdit = view. TextBuffer.CreateEdit();

editar. Borrar (vista. Selection.Start.Position.Position, ver. Selection.End.Position.Position - ver. Selection.Start.Position.Position);

editar. Apply();

vista. Selection.Clear();

}

}

}

El método de delegado final que debemos crear es la que manejan el evento click en el botón pegar. Sin embargo, antes de crear este método primero debemos desarrollar una forma de extraer el elemento de texto de la matriz aClipboardSlotData, que es la estructura de datos que almacenan las ranuras y su historia.

El nuevo método que extrae el texto de una historia de ranura se llama getSelectedItem() y recibe el índice de la ranura como parámetro. Este método debe devolver el valor de los datos de la historia de la ranura que corresponde al elemento seleccionado en el ListView. Si ningún elemento está seleccionado en el ListView el método debe devolver el primer elemento del ListView.

La primera tarea de la getSelectedItem() es conseguir la lista correspondiente con el índice y la matriz de aGroupGrids. A continuación, el método comprueba si el ListView obtenido está vacío y si no es la propiedad SelectedIndex se utiliza con la matriz de aClipboardSlodData para obtener el elemento de la ranura correcta y la posición correcta de la historia.

privada cadena getSelectedItem (int indexSlot)

{

String ret = "";

Lista v = aGroupGrids (ListView) [indexSlot]. Niños [2];

Si (v.Items.Count > 0)

{

Si (v.SelectedIndex > = 0)

{

RET = aClipboadSlotData [indexSlot]. ElementAt(v.SelectedIndex). ToString();

}

otra cosa

RET = aClipboadSlotData [indexSlot]. ElementAt(0). ToString();

}

Return ret;

}

Finalmente, la última pieza de código que debemos implementar es el método de delegado que manejan los haga clic en el botón Paste. El método Paste_Click() Haz primero la corriente ve con el GetActiveTextView() y comprobar si la vista actual es el editor de código, al igual que el Copy_Click() y el Cut_Click() delegan de métodos. El método llama getSelectedItem() enviar como parámetro el índice de valor de la propiedad Tag del botón que se hizo clic.

Si hay algunos datos sobre la historia correspondiente y la posición de la ranura, se debe insertar este texto en la posición actual del cursor (cursor). Para insertar el valor de texto en la posición exacta del cursor usamos otra vez el objeto que implementa la interfaz ITextEdit obtenida por el método CreateEdit() de la propiedad de TextBuffer, al igual que en el método de evento de corte. Sin embargo, aquí nos debemos utilizar el método Insert() en vez de la Delete() y proporcionar la corriente carret posición obtenida de la propiedad Position de la propiedad Caret.Position.BufferPostion del objeto view. La parte final del código de este Instructable es muestra a continuación

void Paste_Click (objeto sender, RoutedEventArgs e)

{

int index = Convert.ToInt32(((Button)sender). Etiqueta);

vista = GetActiveTextView();

Si (! () this.View == null || MultiSlotClipboardPackage.thePackage.Dte.ActiveDocument == null))

{

String sData = getSelectedItem(index);

Si (! sData.Equals(""))

{

Editar Microsoft.VisualStudio.Text.ITextEdit = view. TextBuffer.CreateEdit();

editar. Insertar (vista. Caret.Position.BufferPosition.Position, sData);

editar. Apply();

}

}

}

Artículos Relacionados

Control remoto de múltiples funciones DSLR

Control remoto de múltiples funciones DSLR

Muchas cámaras DSLR pueden ser controladas remotamente usando un transmisor de infrarrojos.Generalmente son del tamaño de un llavero, cuestan entre US$ 8 (para una copia China barata) a US$ 25 (original) y permitir una prensa solo botón que activa el
Construir su propio controlador de cámara inalámbrica de múltiples funciones (¡ barato!).

Construir su propio controlador de cámara inalámbrica de múltiples funciones (¡ barato!).

Introduction¿Siempre creyó su propio controlador de cámara de la construcción?Nota importante: Condensadores para la MAX619 son 470n o 0.47u.  El esquema es correcto, pero la lista de componentes era incorrecto - actualizado.Es una entrada en el conc
Realizar IoT elegante dispositivo con SSR múltiple

Realizar IoT elegante dispositivo con SSR múltiple

Ustedes realmente no es ajeno a control AC (corriente alterna, no aire acondicionado) con el uso del sistema basado en microcontrolador. En los anteriores posts en el blog, hubo varias iteraciones de arduino sous vide; control de un SSR (rele de esta
Parpadean Leds múltiples a diferentes velocidades, 1 función, No demora

Parpadean Leds múltiples a diferentes velocidades, 1 función, No demora

En este Instructables iremos paso a paso desde el boceto de BlinkWithoutDelay estándar a una sola función que podemos recordar para cada LED que tenemos.Obligatorio:Placa ArduinoInstalado el IDE de Arduinopor lo menos 2 Leds2 resistencias de limitaci
Básico Modular múltiples marcos para bicicletas de carga - corte del laser hermético apilable cajas

Básico Modular múltiples marcos para bicicletas de carga - corte del laser hermético apilable cajas

Los marcos múltiples básicos para bicicletas de carga es el primer bloque de edificio en nuestra plataforma de código abierto Vélo M², un ecosistema donde ofrecemos la electricidad solar y energía del pedal y los planes de construir módulos a su imag
4 maneras de hacer superficies múltiples LED Throwies - Taggies

4 maneras de hacer superficies múltiples LED Throwies - Taggies

Hola todo el mundo,hoy que estoy publicando mi Instructable 20 y video de YouTube! Para ello, así que decidí rodar 4 Mini proyectos en uno y espero que te guste.La inspiración para este vino de proyecto de la llamada "throwies" que son básicamen
Cómo encontrar el área en un intervalo utilizando integrales.

Cómo encontrar el área en un intervalo utilizando integrales.

En esta instuctable, podrá aprender cómo encontrar el área bajo la curva usando integrales.Paso 1: materialesPapelLápizCalculadoraEcuación deIntervalo dePaso 2: Conocer la forma estándar para integrales.La forma estándar para integrales está en el cu
Portapapeles de smartphone

Portapapeles de smartphone

Smartphones son fantásticos para muchos usos además de es uso principal como un teléfono. Como estudiante en una conferencia, casi sin espacio para su teléfono, este portapapeles funciona fantástico! Con todas las aplicaciones disponibles, el Portapa
Portapapeles comunicación PC ↔ Pi con Python

Portapapeles comunicación PC ↔ Pi con Python

Yo normalmente uso mi frambuesa Pi en un escritorio compartido de windows. Comparto también una unidad de red con el Pi. Esto es genial, pero sigo teniendo la molestia del portapapeles en el PC no se refleja en la Pi. Puede haber aplicaciones de plat
Frambuesa PiSONE múltiples centro de entretenimiento

Frambuesa PiSONE múltiples centro de entretenimiento

tras el éxito de mi primer Instructible aquí es mi segunda! Es no 1 millón millas lejos de la máquina de arcade que he construido pero el arcade de la máquina es sólo una máquina de un jugador y sólo una tiene pantalla pequeña de una persona.Así que
Centro de Control de cohetes múltiples

Centro de Control de cohetes múltiples

como un líder de Boy Scout de mucho tiempo he encontrado un recurso inestimable. Así que aquí está mi primer intento de ayudar a la comunidad con mi primer instrucable.Esta idea nace de una frustración del año pasado. Era un maestro Scout en un curso
Múltiples entradas analógicas usando un perno de analoge

Múltiples entradas analógicas usando un perno de analoge

¡ Hola!En este instructible voy a explicar cómo leer valores de más de un sensor mediante el uso de solamente una clavija de entrada analógica.Te preguntarás por qué desea esto.Cuando se utiliza un tablero de Nodemcu, como se muestra en la imagen, un
Láser personalizado grabado portapapeles

Láser personalizado grabado portapapeles

En este Instructable, te mostraré cómo configurar un archivo de un logotipo en el material - en este caso, un portapapeles de grabado del laser personalizado!Paso 1: Mida su materialLo primero que hago al iniciar un proyecto es medir mi material. Uti
Pulsera de cuentas de cómo hacer un trenzado múltiple étnicas para el verano

Pulsera de cuentas de cómo hacer un trenzado múltiple étnicas para el verano

Hace ya tiempo pandahall diy equipo había actualizado a la última pulsera de cuentas étnica. Hoy que os traemos un nuevo estilo tibetano con cuentas de diseño de pulsera.Paso 1: Materiales en la fabricación de las pulseras abalorios étnicos trenzadas