Discussion:
Textbox nur Zahlen, Komma und Rücktaste?
(zu alt für eine Antwort)
Christoph1972
2005-05-28 22:29:01 UTC
Permalink
Hallo Zusammen,

ich habe hier schon rumgesucht, aber nicht das Richtige gefunden. Ich möchte
das man nur Zahelen und das Komma eingeben kann, die Insdel Taste soll auch
funktionieren. Bei den Beispielen, die hier gefunden habe geht sie meist
nicht.

Gruß

Christoph
Herfried K. Wagner [MVP]
2005-05-29 01:31:13 UTC
Permalink
Hallo Christoph!

"Christoph1972" <***@discussions.microsoft.com> schrieb:
^^^
Hier sollte der volle Name stehen!
Post by Christoph1972
ich habe hier schon rumgesucht, aber nicht das Richtige gefunden. Ich möchte
das man nur Zahelen und das Komma eingeben kann, die Insdel Taste soll auch
funktionieren.
Anstatt den Benutzer daran zu hindern, Text einzufügen bzw. bestimmte
Zeichen einzugeben, würde ich im Zuge der Eingabevalidierung den Inhalt
prüfen und den Benutzer mittels eines ErrorProvider auf eine fehlerhafte
Eingabe hinweisen:

\\\
Private Sub TextBox1_Validating( _
ByVal sender As Object, _
ByVal e As CancelEventArgs _
) Handles TextBox1.Validating
Dim SourceControl As TextBox = DirectCast(sender, TextBox)
Try
Dim d As Double = Double.Parse(SourceControl.Text)
If Me.ErrorProvider1.GetError(SourceControl).Length > 0 Then
Me.ErrorProvider1.SetError(SourceControl, "")
End If
Catch ex As Exception
Me.ErrorProvider1.SetError( _
SourceControl, _
"Value must be a decimal number. (" & ex.Message & ")" _
)
End Try
End Sub
///
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Karsten Sosna
2005-05-29 04:04:45 UTC
Permalink
"Christoph1972" <***@discussions.microsoft.com> schrieb im
Newsbeitrag news:06AA0091-ACB6-4991-98A4-***@microsoft.com...
^^^^^^^^^^^^^^
Nochmals, hier sollte der volle Name stehen.
Post by Christoph1972
ich habe hier schon rumgesucht, aber nicht das Richtige gefunden. Ich möchte
das man nur Zahelen und das Komma eingeben kann, die Insdel Taste soll auch
funktionieren. Bei den Beispielen, die hier gefunden habe geht sie meist
nicht.
Ich hatte Dir am 28.05.2005 08:59Uhr schon mal auf diese Frage geantwortet,
und Dir gesagt, das die Tasten Ins und Del keine "Zeichen" sind, sondern
Steuercodes der Tastatur sind und diese werden nicht im KeyPress-Event
behandelt. Was eine Insdel-Taste weiß ich und die finde auch nicht auf
meiner 102-Tasten-Tastatur. Ich hatte Dir auch geschrieben, wie man
verfahren sollte und was zu beachten ist.
Wenn hier Beispiele angeführt, so beziehen diese sich meist auf ein
spezieles Problem, also kannst Du nicht davon ausgehen, das jedes Beispiel
auch Dein Problem abdeckt.

Gerade wenn Du sagst, das Du hier neu bist, solltest Du Dich an die
"Spielregeln" halten. Hier wird der Höflichkeit halber unter vollem Namen
gepostet. Man bleibt im ursprünglichen Thread, da sonst das Thema
"zerrissen" wird und es schwer fällt den Zusammenhang zu begreifen. Und man
bleibt freundlich, auch wenn einem die Antwort nicht passt.
--
Gruß Scotty
Karsten Sosna
2005-05-29 04:22:34 UTC
Permalink
Nachtrag:

Hatte ich mein Posting zu früh abgeschickt. :=(

Ich würde genauso verfahren, wie es Herfried beschrieben hat. Aus 2 Gründen:
a) Unterdrückte Tastatureingaben verwirren den Anwender nur und er könnte
evtl. auf den Defekt seiner Tastatur schließen.
b) Ich manchen Ländern wird das Komma als Dezimaltrenner und der Punkt als
Tausendertrenner interpretiert. In anderen ist es genau umgekehrt. Daher ist
es besser die Eingabe zu validieren und ggf. falsche Eingaben zu zulassen.
Wichtig ist nur, das Du die Eingabe dann in den richtigen Datentyp wandelst,
damit die Daten auch richtig speichern kannst, ohne das sie länderspezifisch
sind. Das gilt grundsätzlich für alle Zahlen- und Datumsformate. Hierzu
siehe auch das Thema "Lokalisierung".
--
Gruß Scotty
Christoph1972
2005-05-29 21:25:48 UTC
Permalink
Post by Karsten Sosna
Hatte ich mein Posting zu früh abgeschickt. :=(
a) Unterdrückte Tastatureingaben verwirren den Anwender nur und er könnte
evtl. auf den Defekt seiner Tastatur schließen.
Es ist ein reines Rechenprogramm, die User werden nicht versuchen dort
Buchstaben einzugeben. Messageboxen wären da nur umständlich, weil es sich im
Fall einer Buchstabeneingabe um ein Versehen handelt.
Post by Karsten Sosna
b) Ich manchen Ländern wird das Komma als Dezimaltrenner und der Punkt als
Tausendertrenner interpretiert. In anderen ist es genau umgekehrt. Daher ist
es besser die Eingabe zu validieren und ggf. falsche Eingaben zu zulassen.
Wichtig ist nur, das Du die Eingabe dann in den richtigen Datentyp wandelst,
damit die Daten auch richtig speichern kannst, ohne das sie länderspezifisch
sind. Das gilt grundsätzlich für alle Zahlen- und Datumsformate. Hierzu
siehe auch das Thema "Lokalisierung".
An diesem Thema arbeite ich auch gerade, da in letzter Zeit immer jemand bei
unseren Rechnern ,in der Ländereinstellung, den Punkt als Dezimaltrennzeichen
einstellt. Warum auch immer. Ich werde dann immer gerufen weil mein Programm
scheinbar falsche Werte ausgibt. Aber ich bin halt noch Anfänger und mir
fällt das Programmieren mit .Net schwerer als mit VB.6


Gruß

Christoph
Herfried K. Wagner [MVP]
2005-05-29 21:33:03 UTC
Permalink
Hallo Christoph!
Post by Christoph1972
Post by Karsten Sosna
a) Unterdrückte Tastatureingaben verwirren den Anwender nur und er könnte
evtl. auf den Defekt seiner Tastatur schließen.
Es ist ein reines Rechenprogramm, die User werden nicht versuchen dort
Buchstaben einzugeben. Messageboxen wären da nur umständlich, weil es sich im
Fall einer Buchstabeneingabe um ein Versehen handelt.
Daher ja auch mein Hinweis auf den ErrorProvider.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Christoph1972
2005-05-29 22:15:23 UTC
Permalink
Post by Herfried K. Wagner [MVP]
Daher ja auch mein Hinweis auf den ErrorProvider.
Hallo Herfried,


erst mal Danke für die Hilfe! Dein Code funktioniert bei mir nicht, keine
Ahnung warum. Es werden mehrere Codes unterstrichen. Den Namen der Textbox
habe ich natürlich geändert. Ehrlich gesagt verstehe ich den Code von dir
auch nicht, Wie gesagt ich bin Anfänger.

Gruß

Christoph
Herfried K. Wagner [MVP]
2005-05-29 22:50:33 UTC
Permalink
Hallo Christoph!
Dein Code funktioniert bei mir nicht, keine Ahnung warum. Es werden
mehrere Codes unterstrichen. Den Namen der Textbox
habe ich natürlich geändert. Ehrlich gesagt verstehe ich den Code von dir
auch nicht, Wie gesagt ich bin Anfänger.
Damit der von mir gepostete Code funktioniert, muss eine
ErrorProvider-Komponente (aus dem Werkzeugkasten) auf dem Formular plaziert
werden.

| \\\
| Private Sub TextBox1_Validating( _
| ByVal sender As Object, _
| ByVal e As CancelEventArgs _
| ) Handles TextBox1.Validating

Das Ereignis 'Validating' tritt ein, wenn der Benutzer das Steuerelement
verlässt, etwa, wenn er ein anderen Steuerelement wählt.

| Dim SourceControl As TextBox = DirectCast(sender, TextBox)

Hier holen wir uns einen Verweis auf das Steuerelement, welches das Ereignis
ausgelöst hat.

| Try
| Dim d As Double = Double.Parse(SourceControl.Text)

Mittels 'Double.Parse' wird versucht, den eingegebenen Text als Zahl zu
interpretieren. Alternativ könnte man auch mit 'Double.TryParse' arbeiten.

| If Me.ErrorProvider1.GetError(SourceControl).Length > 0 Then
| Me.ErrorProvider1.SetError(SourceControl, "")
| End If

Der Code wird nur ausgeführt, wenn beim Einlesen der Zahl aus der
eingegebenen Zeichenfolge keine Ausnahme auftritt. Läuft alles glatt, wird
ein allenfalls bereits angezeigter Fehlertext vom Steuerelement entfernt.

| Catch ex As Exception
| Me.ErrorProvider1.SetError( _
| SourceControl, _
| "Value must be a decimal number. (" & ex.Message & ")" _
| )
| End Try

Es ist ein Fehler aufgetreten, deshalb wird ein Fehlertext gesetzt und
angezeigt.

Falls dir am Beispiel oben trotz Blicks in die Dokumentation noch etwas
unklar ist, kannst du hier einfach fragen.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Karsten Sosna
2005-05-30 04:08:34 UTC
Permalink
Post by Christoph1972
Post by Karsten Sosna
a) Unterdrückte Tastatureingaben verwirren den Anwender nur und er könnte
evtl. auf den Defekt seiner Tastatur schließen.
Siehe dazu Herfrieds Beitrag mit dem ErrorProvider.
Post by Christoph1972
Es ist ein reines Rechenprogramm, die User werden nicht versuchen dort
Buchstaben einzugeben. Messageboxen wären da nur umständlich, weil es sich im
Fall einer Buchstabeneingabe um ein Versehen handelt.
Das hat mit der eigentlichen Aufgabe nicht viel zutun, sondern eher wie und
wann man den User darauf hinweist, das er eine fehlerhafte Eingabe getätigt
hat. Ist eine reine Design-Angelegenheit.
Post by Christoph1972
Post by Karsten Sosna
b) Ich manchen Ländern wird das Komma als Dezimaltrenner und der Punkt als
Tausendertrenner interpretiert. In anderen ist es genau umgekehrt. Daher ist
es besser die Eingabe zu validieren und ggf. falsche Eingaben zu zulassen.
Wichtig ist nur, das Du die Eingabe dann in den richtigen Datentyp wandelst,
damit die Daten auch richtig speichern kannst, ohne das sie
länderspezifisch
sind. Das gilt grundsätzlich für alle Zahlen- und Datumsformate. Hierzu
siehe auch das Thema "Lokalisierung".
An diesem Thema arbeite ich auch gerade, da in letzter Zeit immer jemand bei
unseren Rechnern ,in der Ländereinstellung, den Punkt als
Dezimaltrennzeichen
einstellt. Warum auch immer.
Vielleicht ist er Amerikaner?
Post by Christoph1972
Ich werde dann immer gerufen weil mein Programm
scheinbar falsche Werte ausgibt.
Und genau da liegt das Problem, weil Du eine Interpertation machst, die
nicht auf die Ländereinstellungen reagiert. Deswegen mein Hinweis.
Post by Christoph1972
Aber ich bin halt noch Anfänger und mir
fällt das Programmieren mit .Net schwerer als mit VB.6
In VB6 hast Du das gleiche Problem. Gerade wenn Du Anfänger bist solltest Du
auf solche Tipps hören, da Du sonst grundsätzliche Fehler machst und diese
dann zur Gewohnheit werden.
--
Gruß Scotty
Christoph1972
2005-05-29 21:30:42 UTC
Permalink
Post by Karsten Sosna
Ich hatte Dir am 28.05.2005 08:59Uhr schon mal auf diese Frage geantwortet,
Äh, wo denn??
Post by Karsten Sosna
und Dir gesagt, das die Tasten Ins und Del keine "Zeichen" sind, sondern
Steuercodes der Tastatur sind und diese werden nicht im KeyPress-Event
behandelt. Was eine Insdel-Taste weiß ich und die finde auch nicht auf
meiner 102-Tasten-Tastatur.
Das ist die Rücktaste.....

Ich hatte Dir auch geschrieben, wie man
Post by Karsten Sosna
verfahren sollte und was zu beachten ist.
Wenn hier Beispiele angeführt, so beziehen diese sich meist auf ein
spezieles Problem, also kannst Du nicht davon ausgehen, das jedes Beispiel
auch Dein Problem abdeckt.
Davon gehe ich auch nicht aus
Post by Karsten Sosna
Gerade wenn Du sagst, das Du hier neu bist, solltest Du Dich an die
"Spielregeln" halten. Hier wird der Höflichkeit halber unter vollem Namen
gepostet.
Gut kann ich machen, aber was bringt es wenn hier alle Müller heißen?

Man bleibt im ursprünglichen Thread, da sonst das Thema
Post by Karsten Sosna
"zerrissen" wird und es schwer fällt den Zusammenhang zu begreifen.
Kein Problem
Post by Karsten Sosna
Und man bleibt freundlich, auch wenn einem die Antwort nicht passt.
Keine sorge, ich habe eine gute Erziehung genossen!


Gruß

Christoph
Karsten Sosna
2005-05-30 03:55:32 UTC
Permalink
Post by Christoph1972
Post by Karsten Sosna
Ich hatte Dir am 28.05.2005 08:59Uhr schon mal auf diese Frage geantwortet,
Äh, wo denn??
Hier.
===========

"Christoph1972" <***@discussions.microsoft.com> schrieb im
Newsbeitrag news:3BC84B4E-711E-4D64-936B-***@microsoft.com...
^^^^^^^^^^^^
Hier sollte der richtige Name stehen(Vor- und Zuname)
Post by Christoph1972
Post by Karsten Sosna
Private Sub TextBox1_KeyPress( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles TextBox1.KeyPress
'Wenn die Eingabe nicht numerisch ist
If Not IsNumeric(e.KeyChar) Then
'unterdrücken
e.Handled = True
End If
End Sub
Hallo,
Aber so ist auch die Eingabe von Kommas geblockt, das ist zum Rechnen
nicht
so günstig. Die Insdel Taste ist ebenfalls geblockt. Wie muss den Code
aussehen, wenn ich die Kommaeingabe und Insdel erlauben will?
Bei der Eingabe von Kommatas brauchst Du nur die Abfrage erweitern. Insert
und Delete betrifft das nicht, da das keine "Zeichen" sondern sind
Steuercodes von der Tastatur. Lediglich auf BackSpace müßte noch geprüft
werden, da das ein !Steuerzeichen! ist.
\\\
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If Not (IsNumeric(e.KeyChar) Or e.KeyChar = ","c Or e.KeyChar = Chr(8))
Then
e.Handled = True
End If
End Sub
///
--
Gruß Scotty
================
Post by Christoph1972
Post by Karsten Sosna
und Dir gesagt, das die Tasten Ins und Del keine "Zeichen" sind, sondern
Steuercodes der Tastatur sind und diese werden nicht im KeyPress-Event
behandelt. Was eine Insdel-Taste weiß ich und die finde auch nicht auf
meiner 102-Tasten-Tastatur.
Das ist die Rücktaste.....
Und genau dazu hatte ich Dir etwas geschrieben.
Post by Christoph1972
Ich hatte Dir auch geschrieben, wie man
Post by Karsten Sosna
verfahren sollte und was zu beachten ist.
Wenn hier Beispiele angeführt, so beziehen diese sich meist auf ein
spezieles Problem, also kannst Du nicht davon ausgehen, das jedes Beispiel
auch Dein Problem abdeckt.
Davon gehe ich auch nicht aus
Gut.
Post by Christoph1972
Post by Karsten Sosna
Gerade wenn Du sagst, das Du hier neu bist, solltest Du Dich an die
"Spielregeln" halten. Hier wird der Höflichkeit halber unter vollem Namen
gepostet.
Gut kann ich machen, aber was bringt es wenn hier alle Müller heißen?
Man kann ja auch seinen richtigen Namen angeben, so wie andere und ich das
auch tun, oder schämst Du Dich wegen Deinem?
Post by Christoph1972
Man bleibt im ursprünglichen Thread, da sonst das Thema
Post by Karsten Sosna
"zerrissen" wird und es schwer fällt den Zusammenhang zu begreifen.
Kein Problem
Post by Karsten Sosna
Und man bleibt freundlich, auch wenn einem die Antwort nicht passt.
Keine sorge, ich habe eine gute Erziehung genossen!
Dann sind wir uns ja einig. ;=)
--
Gruß Scotty
Peter Götz
2005-05-30 16:41:34 UTC
Permalink
Hallo Christoph,
Post by Christoph1972
ich habe hier schon rumgesucht, aber nicht das Richtige gefunden. Ich möchte
das man nur Zahelen und das Komma eingeben kann, die Insdel Taste soll auch
funktionieren. Bei den Beispielen, die hier gefunden habe geht sie meist
nicht.
Bei

www.gssg.de -> Visual Basic -> VB.net -> NumInput

kannst Du Ziffern (0...9), Vorzeichen (+, -) und das in der Systemsteuerung
eingestellte Dezimaltrennzeichen eingeben.
Über die Eigenschaft NumDecimales kannst Du festlegen, ob und wieviele
Dezimalstellen eingegeben werden dürfen.

Tastenkombinationen wie Strg+C (kopieren), Strg+X (Ausschneiden), Strg+V
(Einfügen) sind ebenfalls möglich. Einfügen jedoch nur, wenn der Inhalt der
Zwischenablage numerisch ist.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)

Loading...