A trükk lényege a következő: ha a TextBox-ban van kijelölt szöveg és a felhasználó lenyom egy billentyűt, akkor a kijelölt szöveg törlésre kerül és annak helyén megjelenik az új karakter. Ha most el tudjuk érni azt, hogy mindig a kurzortól egy karakterrel jobbra lévő karakter legyen kijelölve és az is csak akkor, amikor az új billentyű lenyomása történik, akkor létrejön a kívánt funkció. Mivel a szöveg kijelölés csak akkor történik meg, amikor már le lett nyomva a soron következő billentyű, így a felhasználó észre sem veszi, hogy mi is történt, hanem csak az eredményt látja: felülírás történik a TextBox-ban.
Egészítsük ki még ezt a funkciót azzal, hogy az Insert gomb lenyomásával változtathatunk beszúró és felülíró mód között. Az aktuális mód tárolásárára megkérjük az insertMode nevű változónkat.
private bool insertMode = true;
Ezek után, ha billentyű lenyomás történik és nincs a felhasználó által kijelölt szöveg a TextBox-ban, valamint a beszúró üzemmód lett kijelölve, akkor nincs más teendőnk, mint a SelectionLength property értékét 1-re állítani. Ezzel azt érjük el, amire szükségünk is van: az aktuális kurzor pozíció mellett egy karakter lesz kijelölve, de mivel a billentyű lenyomás már megtörtént, így ez a kijelölt karakter rögtön törlésre is kerül és annak helyén megjelenik az új.
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (textBox1.SelectionLength==0 && insertMode)
{
textBox1.SelectionLength=1;
}
}
Az Insert gomb figyelését a KeyDown eseménynél valósítjuk meg és itt egyszerűen új értéket adunk az insertMode nevű változónknak.
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode==Keys.Insert)
{
insertMode=!insertMode;
}
}