login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Selection changed event voor gewone tekstbox (Opgelost)

Offline lolll - 17/08/2011 20:19
Avatar van lolllLid Hallo,

ik ben bezig met een soort van kladblok programmatje te maken (om later uit te breiden naar een volwaardige editor). Helaas loop ik al vast bij een 'simpel' (dat dacht ik toch althans) probleem. Ik zou graag in een statuslabel de huidige lijn en 'kolom' weergeven van waar de cursor op dat moment staat. Hiervoor gebruik ik volgende code:
  1. regel = textBox1.GetLineFromCharIndex(textBox1.SelectionStart) + 1;
  2. teken = textBox1.SelectionStart - textBox1.GetFirstCharIndexOfCurrentLine() + 1;
  3. toolStripStatusLabel1.Text = "Regel " + regel + " Teken " + teken;

Deze koppel ik aan de textchanged event en de click event. Tot daartoe werkt het. Maar als ik deze aan de keypress event koppel, gaat hij raar beginnen doen als ik met de pijltjes navigeer. Toen zocht ik op het internet naar iets dat aangeeft dat de cursor zich verplaatst, toen kwam ik op de selectionchanged event van de richtekstbox. Dan heb ik voortgezocht naar die event voor een gewone tekstbox, maar hier vind ik niets voor. Meestal zei men dat ik dan gewoon een richtextbox moest gebruiken, maar dat wil ik nu niet, want ik wil geen ondersteuning voor afbeeldingen of opgemaakte tekst. Want daar dient mijn programma niet voor.

Heeft iemand enig idee hoe ik dit kan oplossen. Ik heb ook al geprobeerd om een nieuw klasse te maken afgeleid van de textbox class, maar ik ken niet zoveel van events, dus dat is niet gelukt.

Lolll

2 antwoorden

Gesponsorde links
Offline Abbas - 18/08/2011 02:57
Avatar van Abbas Gouden medaille

Crew .NET
Je zat in de goede richting te denken maar de pijljestoetsen zullen het KeyPress event niet raisen. Je probleem los je op door een KeyUp en KeyDown event toe te passen. Maar waarom allebei en niet één van de twee?

Als je enkel KeyUp gaat gebruiken werkt het naar behoren tot je de linker/rechterpijltjestoets een tijdje ingedrukt houdt. Je positie zal pas upgedatet worden wanneer je dan loslaat. Gebruik je enkel KeyDown dan zit er een soort van 'delay' op de update van de positie. Ga je bijvoorbeeld naar de laatst mogelijke positie, dan is nog steeds 1 te weinig, tenzij je nogmaals op de rechterpijltoets duwt.

Wanneer je dus gebruik maakt van beide methodes zal alles naar behoren werken, voorbeeldcode:

  1. private void TextBox1TextChanged(object sender, EventArgs e)
  2. {
  3. UpdateCursorPosition();
  4. }
  5.  
  6. private void TextBox1Click(object sender, EventArgs e)
  7. {
  8. UpdateCursorPosition();
  9. }
  10.  
  11. private void TextBox1KeyDown(object sender, KeyEventArgs e)
  12. {
  13. UpdateCursorPosition();
  14. }
  15.  
  16. private void TextBox1KeyUp(object sender, KeyEventArgs e)
  17. {
  18. UpdateCursorPosition();
  19. }
  20.  
  21. private void UpdateCursorPosition()
  22. {
  23. var regel = textBox1.GetLineFromCharIndex(textBox1.SelectionStart) + 1;
  24. var teken = textBox1.SelectionStart - textBox1.GetFirstCharIndexOfCurrentLine() + 1;
  25. toolStripStatusLabel1.Text = "Regel " + regel + "Teken " + teken;
  26. }

Hopelijk kan je hiermee verder! 
Bedankt door: lolll
Offline lolll - 18/08/2011 16:40
Avatar van lolll Lid Oh, bedankt. Het was dus toch eenvoudiger dan ik dacht  

Ook bedankt voor je duidelijke uitleg, want anders zou ik niet geweten hebben waarom je beide functies gebruikte (up en down).

Lolll
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.167s