MultiSlot Klembord (8 / 9 stap)

Stap 8: Codering de gebeurtenissen

In deze stap moeten we vullen in de code voor de gebeurtenissen van de knoppen

en de ListView. Deze gebeurtenissen zijn generiek, wat betekent dat alle dynamisch gegenereerde besturingselementen noem deze gebeurtenissen. Dus, als u wilt weten welke sleuf genoemd de gebeurtenis zal lezen we de Tag-eigenschap van het besturingselement, waarin de juiste index van de matrix aClipboardSlotData.

Laten we beginnen met de gebeurtenis die het tweemaal klikken op de ListView verwerkt. Wanneer de gebruiker dubbelklikt op een ListViewItem laten we zien een berichtvenster weergegeven met de inhoud van de geselecteerde elementen.

Als de SelectedIndex van de eigenschap ListView groter dan -1 Dit is betekent dat een item is geselecteerd, en wij zullen gebruiken de waarde van deze eigenschap als een index voor de matrix die het opslaan van gegevens op het Klembord (aClipboardSlotData). De volgende code toont de inhoud van de lstData_MouseDoubleClick() gemachtigde methode.

VOID lstData_MouseDoubleClick (object afzender, MouseButtonEventArgs e)

{

ListView v = (ListView) afzender;

int index = Convert.ToInt32(v.Tag);

Als (v.SelectedIndex! = -1)

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

}

De volgende methode van de gemachtigde moeten wij scheppen is de gebeurtenis die omgaan met de Klik op de knop kopiëren. Deze gemachtigde methode heet Copy_Click() en we moeten eerst het venster actieve code met de methode van de GetActiveView() gemaakt op stap 6 en controleer of de weergave de juiste is.

Vervolgens moeten we de huidige geselecteerde tekst lezen met de GetTextForPastie() methode die ook op stap 6 is gemaakt. Nadat we de tekst moeten we controleren als het leeg is.

Als de geselecteerde tekst niet leeg is, moeten we deze afbeelding invoegen op de matrix aClipboardSlotData. Wij voeren deze invoegen in een nieuwe methode genaamd InsertDataHistory(). Ten slotte moeten we de ListView met een andere nieuwe methode genaamd AccomodateDataListView() bijwerken. Maar eerst laten we zien de code voor de Copy_Click() methode delegeren.

VOID Copy_Click (object afzender, RoutedEventArgs e)

{

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

weergave = GetActiveTextView();

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

{

Delampenfabrikant koord = GetTextForPastie(view);

Als (delampenfabrikant! = "")

{

InsertDataHistory (index, delampenfabrikant);

AccomodateDataListView(index);

}

}

}

De Copy_Click() begint met het lezen van de waarde van de eigenschap label van de knop waarop werd geklikt. Deze eigenschap bevat de index die we gaan gebruiken als het nummer van de sleuf. Volgende we de GetActiveTextView()-methode aanroept en controleer de geretourneerde waarde om te zien als we got naar de juiste venster.

De volgende coderegels krijgen de geselecteerde tekst met de GetTextForPastie()-methode. Wij controleren dan als er geen geselecteerde tekst en zoja we de InsertDataHistory() methode aanroepen om de gegevens op de array aClipboardSlotData invoegen. Ten slotte, wijzigen we de elementen van de ListView met de AccomodateDataListView()-methode.

De InsertDataHistory()-methode heeft een eenvoudige baan. Eerst ontvangt het de index van de Klembord-sleuf en de geselecteerde tekst. Dan moeten de geselecteerde tekst ingevoegd op de eerste positie van de aClipboardSlotData matrix, die als een stapel of LIFO datastructuur (http://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29 werken moet).

In de plaats van uitvoering van de gegevensstructuur van een stapel van kras we gewoon een nieuwe lijst maken en invoegen van de waarde van de geselecteerde tekst verzonden als een parameter in de eerste positie. Vervolgens doorlopen we de bestaande array van de aClipboardSlotData vanaf het tweede element en het invoegen van de gegevens op de nieuwe lijst gemaakt. Ten slotte, negeren we de bestaande lijst op aClipboardSlotData met de tekst die we zojuist hebt gemaakt. De volgende code toont hoe deze operaties worden uitgevoerd.

private void InsertDataHistory (int indexSlot, String delampenfabrikant)

{

Lijst van list_temp = nieuwe List();

list_temp. Invoegen (0, delampenfabrikant);

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

{

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

}

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

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

terugkeer;

}

Nu dat we de geselecteerde tekst op de juiste positie van de lijst die is opgeslagen in de array aClipboardSlotData ingevoegd moeten we de elementen van de ListView bijwerken. Dat doen we binnen de AccomodateDataListView()-methode die ontvangt de index van de matrix als een parameter.

De AccomodateDataListView() is eenvoudig: we wissen van alle ListViewItem elementen en nieuwe in de volgorde van de lijst die is opgeslagen in de aClipboardSlotData ingevoegd. Wij zorg enkel ervoor invoegen alleen het 15 tekens van elke tekst om te voorkomen dat de tekst knippen. Tot slot, we vragen voor een vernieuwing op de UI en selecteer het eerste element van de ListView.

private void AccomodateDataListView (int indexSlot)

{

ListView v = (ListView) aGroupGrids [indexSlot]. Kinderen [2];

v.Items.Clear();

foreach (String s in aClipboadSlotData[indexSlot])

{

Als (! s.Equals(""))

{

Als (s.Length > 15)

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

anders

v.Items.Add(s);

}

}

v.Items.Refresh();

v.SelectedIndex = 0;

}

We zijn bijna klaar. We moeten de code voor de gebeurtenissen die omgaan met de Klik in het knippen en plakken knoppen maken. De gebeurtenis voor de knop Knippen is bijna hetzelfde als de knop kopiëren: het enige verschil is dat nadat we de geselecteerde tekst moeten we de tekst die is geselecteerd in het codevenster te wissen en verwijderen van de selectie van de tekst.

Als u wilt wissen van de geselecteerde tekst moeten we gebruik van het object die de ITextEdit-interface implementeren. Wij krijgen dit object van de methode van de CreateEdit() van de TextBuffer-eigenschap gevonden op de weergave-variabele die aangeeft van de huidige weergave van de code-editor. Zodra we het ITextEdit-object gebruiken we de Delete()-methode om te wissen van de tekens en de Apply()-methode om de tekst te wijzigen. Tenslotte, verwijderen we de selectie met de methode Clear() van de eigenschap Selection van de weergave.

Maar er een vangst is als we de Delete()-methode gebruiken: we moeten zorgen voor de positie die we willen begint met het verwijderen van de tekens en hoeveel tekens moeten we verwijderen. Om de positie van de huidige selectie gebruiken we de eigenschap Position van het pand van de Selection.Start, die vertegenwoordigt de start plek waar selectie begint. Op een vergelijkbare manier, we de Selection.End-eigenschap gebruiken om de positie van de exacte getal van het einde van de selectie. De code voor de methode van de gemachtigde Cut_Click() is hieronder weergegeven.

VOID Cut_Click (object afzender, RoutedEventArgs e)

{

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

weergave = GetActiveTextView();

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

{

Delampenfabrikant koord = GetTextForPastie(view);

Als (delampenfabrikant! = "")

{

InsertDataHistory (index, delampenfabrikant);

AccomodateDataListView(index);

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

bewerken. Verwijderen (weergave. Selection.Start.Position.Position, weergave. Selection.End.Position.Position - weergave. Selection.Start.Position.Position);

bewerken. Apply();

bekijken. Selection.Clear();

}

}

}

De definitieve gemachtigde methode die we moeten creëren is enerzijds dat het verwerken van de gebeurtenis click op de knop plakken. Echter voordat wij deze methode maken moeten we eerst een manier om het uittreksel van het tekstelement uit de array aClipboardSlotData, die is de gegevensstructuur die de "slots" en hun geschiedenis opslaan ontwikkelen.

De nieuwe methode die wordt de tekst opgehaald uit een sleuf geschiedenis heet getSelectedItem() en zij ontvangt de index van de sleuf als parameter. Deze methode moet terugkeren de gegevenswaarde uit de geschiedenis van de sleuf die overeenkomt met het geselecteerde item op de ListView. Als u geen item is geselecteerd op de ListView moet de methode het eerste element van de ListView retourneren.

De eerste taak van de getSelectedItem() is om de bijbehorende ListView met de index en de aGroupGrids array. Vervolgens controleert de methode als de verkregen ListView leeg is en als het niet de eigenschap SelectedIndex wordt gebruikt met de aClipboardSlodData array om het element uit de juiste sleuf en de positie van de juiste geschiedenis.

private String getSelectedItem (int indexSlot)

{

Tekenreeks ret = "";

ListView v = (ListView) aGroupGrids [indexSlot]. Kinderen [2];

Als (v.Items.Count > 0)

{

Als (v.SelectedIndex > = 0)

{

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

}

anders

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

}

terugkeer ret;

}

Ten slotte, het laatste stukje code die we moeten implementeren is de gemachtigde methode die omgaan met de Klik op de knop plakken. De methode Paste_Click() eerst krijgen de huidige bekijken met behulp van de GetActiveTextView() en controleren of de huidige weergave is de code-editor, net als het Copy_Click() en de Cut_Click() methoden overdragen. De methode roept vervolgens de getSelectedItem() verzenden als een parameter die de index waarde verkregen uit de eigenschap label van de knop waarop werd geklikt.

Als er gegevens over de bijbehorende geschiedenis en sleuf positie is, moet deze tekst worden ingevoegd in de huidige cursorpositie (caret). Als u wilt invoegen de tekstwaarde in de exacte cursorpositie we gebruiken opnieuw het object dat de interface van de ITextEdit verkregen uit de methode van de CreateEdit() van de TextBuffer-eigenschap, net als wij op de Cut event methode implementeren. Echter, moeten we hier de Insert() methode gebruiken in plaats van de Delete() en de huidige positie van de carret verkregen uit de eigenschap Position van de Caret.Position.BufferPostion-eigenschap van het object view. Het laatste stuk van de code van dit Instructable is Toon hieronder

VOID Paste_Click (object afzender, RoutedEventArgs e)

{

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

weergave = GetActiveTextView();

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

{

Delampenfabrikant koord = getSelectedItem(index);

Als (! sData.Equals(""))

{

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

bewerken. Invoegen (weergave. Caret.Position.BufferPosition.Position, delampenfabrikant);

bewerken. Apply();

}

}

}

Gerelateerde Artikelen

Smartphone Klembord

Smartphone Klembord

Smartphones zijn fantastische voor vele toepassingen naast het is voornamelijk gebruikt als een telefoon. Als student bij een lezing, met vrijwel geen ruimte voor uw telefoon, werkt deze Klembord fantastisch! Met alle grote apps beschikbaar is de Sma
Klembord mededeling PC ↔ Pi met Python

Klembord mededeling PC ↔ Pi met Python

Normaal gebruik ik mijn Raspberry-Pi op een gedeelde bureaublad van windows. Ik deel ook een netwerkstation met de Pi. Dit is geweldig, maar ik heb nog steeds de ergernis van het Klembord op de PC niet wordt weergegeven op de Pi. Al zou het leuker om
Muis val Klembord

Muis val Klembord

Maak een volledig goedkoop Klembord vrijwel overal met deze slimme muis val Klembord. Grijpen sommige muis vallen, Tangen en een oscillerende tool (ik gebruikte een Dremel multi Max) met een flush geslepen mes.Stap 1: Ontvang uw suppliesIk pakte een
Carbon Fiber Klembord

Carbon Fiber Klembord

ik werk voor een bedrijf dat samengestelde maakt voor de luchtvaartindustrie delen.  Elke zo vaak tegenkomen ik laminaten gemaakt van koolstofvezel of glasvezel.  Ik voelde me alsof het een schande dat deze stukken gaan naar afval, dus begon ik op zo
Hoe maak je een mini Klembord

Hoe maak je een mini Klembord

dit is een zakje spanwijdte Klembord weinig om notities te maken op.Stap 1: levert. u nodig heeft,2 wasmachines, 1 bout,1 bout,1 pakje van post-it notities,1 stuk van een tegel laminaaten 1 mini clip.Stap 2: het samen te brengen Neem nu uw tegel. Zet
Klembord pennenhouder

Klembord pennenhouder

uw klembord met een functionele pennenhouder aanpassen.   Dit is snel, goedkoop en gemakkelijk!  Het resultaat is zeer effectief.  Ik gebruik de mijne dagelijks.Stap 1: Wat u nodig hebt. (Ik blijf denken INXS) Zoals met veel van mijn instructables, d
WERELDS MAKKELIJKSTE KUNST KLEMBORD!!!

WERELDS MAKKELIJKSTE KUNST KLEMBORD!!!

Als een frequente lade, ik met behulp van 9 "x 12" papier krijg ik van mijn lokale drukkerij. Het enige probleem is dat de vellen niet passen alle klemborden voor portabiliteit...... behalve dit één heb ik zelf gemaakt.Voor hulpmiddelen die u op
Klembord snel n' gemakkelijk

Klembord snel n' gemakkelijk

Een paar minuten geleden besloten heb ik dat ik een snelle schema van mijn nieuwste circuit ontwerp moeten trekken. Ik dacht: "Goh, ik wou dat ik had een Klembord om te zetten van een vel papier typen op, zodat ik dit met een zekere mate van stabilit
Sugru pennenhouder (voor klembord)

Sugru pennenhouder (voor klembord)

U moet:een KlembordSugrueen penStap 1: Verdelen van de Sugru, bepalen van plaatsing We vier stukken, gebruikt voor het plaatsen van boven en onder de pen op vier plekken. U kunt waarschijnlijk twee grote stukken, of drie kleintjes... Wat best aanslui
InstaMorph A Klembord!

InstaMorph A Klembord!

Hallo mensen!De Omaha Maker Groep is terug met een andere grote Instructable, ditmaal als onderdeel van de April bouwen nacht met InstaMorph!Voor dit project had een van onze leden een Opslag Klembord die hij gebruikt voor het maken van notities in h
Klembord voor links overhandigde mensen

Klembord voor links overhandigde mensen

als u linkshandig bent, weet je hoe moeilijk het is om op een klembord te schrijven. De clip, zelfs op een laag profiel Klembord zoals die hier is afgebeeld, is voortdurend in de weg van uw hand.Stap 1: Een mogelijkheid Is het bijna onmogelijk om te
KLEMBORD, 2013 SKO TRENDER PA NEWPORT BANAN

KLEMBORD, 2013 SKO TRENDER PA NEWPORT BANAN

Klembord, newport wereldgroep runwayhttp://Clipboard.com/clip/LQN4RJQ30eF8cNGwzRJteEltid4oOWztZRme2013 ik skor är olika ontwerpers önskan att använda endast de bästa Materials. För de vackra werd välklippta, förblir 2013 engagerad ik naturliga materi
Het Klembord

Het Klembord

Als onderdeel van mijn eeuwige zoektocht te organiseren elk aspect van mijn sterfelijke bestaan, besloten heb ik dat ik had behoefte aan een systeem voor het bijhouden van de voortgang van de orders van de klant in de werkplaats. Mijn geheugen heeft
Keltische knoop Macrame armband

Keltische knoop Macrame armband

Een geweldig cadeau (of voor je!), unisex, en gemakkelijk te maken in het proces-verbaal - hier is hoe te maken van een Keltische knoop armband!Deze armband is macramé, en gebruikt een van de meest populaire soorten van de "Keltische knopen" (he