[VB 2005]MaskedTextBox

Arster-Boy

Erfahrenes Mitglied
Wie kann ich eine MaskedTextBox so einstellen, dass ich 10 Zahlen von rechts nach links eintippen kann.

Wenn ich bei Maske zehn Nullen angebe, dann kann ich irgendwo eine Zahl hinschreiben...
 
Du musst die Einstellung RightToLeft auf Yes setzen, damit von rechts nach links geschrieben wird.
Dann musst du die TextChanged-Event Methode so programmieren, dass die erst die Anzahl der Zeichen überprüft, und dann den Inhalt.

Beispielcode:
Code:
Private Sub MaskedTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MaskedTextBox1.TextChanged
    If MaskedTextBox1.TextLength > 10 Then
        MaskedTextBox1.Text = MaskedTextBox1.Text.Substring(0, 10)
    End If
    If MaskedTextBox1.Text = "0000000000" Then
        TextBox1.Visible = True
    Else
        TextBox1.Visible = False
    End If
End Sub
 
Ich meinte links nach rechts. Entschuldigung...

Das mit dem text_Changed verstehe ich noch nicht so ganz.

Ich möchte, dass man nur höchstens 8 Zahlen eingeben kann.
 
nimm am besten normale TextBox und setzte MaxLength auf 8
im TextChanged Ereignis kannst du dann prüfen ob andere Zeichen als numerische in der TextBox

ungefähr so:
Code:
private int lastValue=0;
private void textBox1_TextChanged(object sender, EventArgs e)
{
  int iHelp;
  if(int.TryParse( textBox1.Text, out iHelp))
     lastValue=iHelp;
  else
     textBox1.Text=lastValue.ToString();
     
}
Der Code überprüft ob der eingegebene Text nach int geparsest werden kann, wenn ja sind nur Zahlwerte im Text und der aktuelle Wert wird in lastValue gespeichert.
Beinhaltet die Textboxe andere Werte, wird der letzte gespeicherte Wert von lastValue als Texteigenschaft gesetzt.

Mir ist auch so als wenn man irgendwo direkt den Datentypen festlegen konnte, nur da hab ich jetzt nixs zu gefunden.
 
Das mit den Lines ist schon erledigt...

Irgendwie kann ich trotzdem noch Buchstaben eingeben...

Visual Basic:
    Dim lastValue As Integer = 0
    Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim iHelp As Integer
        If Integer.TryParse(TextBox1.Text, iHelp) Then
            lastValue = iHelp
        Else
            TextBox1.Text = lastValue
        End If
    End Sub
 
Zuletzt bearbeitet:
N'abend!

Da ich die Methode mit der lastValue Variante unschön finde, würde ich das ganze im KeyDown-Ereignis abarbeiten. Dort entsprechend nur die Tasten 0-9 zulassen, evtl. noch die Entf und die Backspace-Taste, wenn negative Werte erlaubt sind, dann ebenfalls noch den Bindestrich und das Komma für Dezimale Werte.
Gut man muss etwas mehr Logik selbst implementieren, aber letztlich finde ich, dass dabei eine sauberere Lösung herauskommt.

By the way: Mit RightToLeft erreichst du, dass der Text von Rechts nach Links ausgegeben wird, also z.B. wie im Arabischen. Du solltest für einen rechtsbündig ausgerichteten Text das Alignment oder TextAlign (keine Ahnung wie das jetzt genau heißt) auf Right setzen.
 
der Code ist so erstmal ist richtig.

Irgendwo weiter oben im Thread wird etwas von TextBoxen in Verbindung mit MaskBoxen gesagt.
Das hast du offentlich nicht gemacht.
Sprich, hoffe du hast deine MaskTextBox gelöscht und verwendest einfach nur TextBox1.
Für Texteingabe,- ausgabe und Ereignis.

Also wie gesagt an diesem Codeausschnitt liegts nicht.
 
N'abend!

Da ich die Methode mit der lastValue Variante unschön finde, würde ich das ganze im KeyDown-Ereignis abarbeiten.
Finde ich nicht :p

Immerhin kann man immer noch über die Kopierfunktion Alphanumerischen Text einfügen. Sprich du müsstest noch ContextMenü prüfen und Tasten kombo Strg. + V.
Da ist meine Eventprüfung wessentlich sicherer und übersichtlicher.
 

Neue Beiträge

Zurück