Laden...

MaskedTextBox für IP Eingabe zwischen den "Oktetten" springen lassen

Erstellt von Midnight Run vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.642 Views
Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 13 Jahren
MaskedTextBox für IP Eingabe zwischen den "Oktetten" springen lassen

Hallo,
ich habe in meiner Anwendung eine MaskedTextBox die, die Oktetten einer Adresse hervorheben, sprich :

xxx . xxx . xxx . xxx

Nun möchte ich das wenn der Benutzer in diesem Feld ist, dass selbe verhalten bekommt wie man es unter der Windows Netzwerkadapterwahl hat.

Wenn der Benutzer die Pfeiltaste Rechts drück springt man direkt zum nächsten Oktett, das ist eben die nächste Position nach einem .(Punkt).

Ich habe folgenden Eventhandler nun erstellt :


        private void maskedTextBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                radButton9_Click(sender, e);
            }
            else if ((e.KeyCode == (Keys)190) || (e.KeyCode == Keys.Right))
            {
                maskedTextBox1.SelectionStart =
                    (maskedTextBox1.Text.IndexOf(',', maskedTextBox1.SelectionStart) == -1)
                                                ? 0
                                                : maskedTextBox1.Text.IndexOf(',', maskedTextBox1.SelectionStart);
            }
        }

Wenn die Tastatureingabe der Rechts Pfeil war gucke ich einfach nach dem nächsten Index von der aktuellen Position aus wo ein , erscheint und springe dort hin.

Soweit so gut. Den Fall das man ganz rechts ist habe ich auch bedacht und setze dann den SelectionStart auf 0. Aber hier liegt das Problem. Der Cursor springt nicht dann an die erste Position sonder an die zweite.

Ich habe schon alles beobachtet. Obwohl der Wert von SelectionStart auf 0 gesetzt wird steht der Cursor falsch.

Wo liegt mein Fehler ?

Danke

328 Beiträge seit 2006
vor 13 Jahren

Das Verhalten rührt daher, dass du den Index falsch berechnest und du e.Handled nicht auf "true" setzt.
Du machst jetzt gerade folgendes: Du holst dir den Index des nächsten "," zeichens und springst zu dem Index. Der Cursor ist dann genau ein Zeichen vor dem ",". Da du nun e.Handled nicht auf true setzt, geht der Cursor nochmal eins weiter und du denkst du hast alles richtig gemacht 😉 Dem ist aber nicht so, wie du beim setzen des Cursors an die Position 0 feststellst.

Also addiere eins zum index hinzu und setzte e.Handled auf true:

            if (e.KeyCode == Keys.Right)
            {
                maskedTextBox1.SelectionStart = maskedTextBox1.Text.IndexOf(',', maskedTextBox1.SelectionStart)+1;
                e.Handled = true;
            }

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck

Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 13 Jahren

Dankeschön. Funktioniert. Das mit dem e.Handled kannte ich gar nicht. Muss da mal nochmal nachschlagen.

Danke nochmals 👍