Hey Leute,
ich hab mal ein kleines Anliegen, für die jenigen, die sich mit Visual Basic auskennen.
Folgender Sachverhalt:
Im Rahmen meines Studiums soll ich ein Programm mit Hilfe von Visual Basic programmieren. Das Thema des Programms ist ein Ticketverkauf mit begrenzter Anzahl an Karten^^
Nun zu meinem Problem:
Wie sicher ich die Eingabe der Personen so ab, dass keine Kommazahl verwendet werden darf. Also sprich Erwachsenenanzahl = 2 und nicht Erwachsenenanzahl = 2,2
Visual Basic....
Moderatoren: Moderatoren, Redakteure
-
- Beiträge: 40
- Registriert: 23.01.2010 16:06
- Persönliche Nachricht:
- Naxlive
- Beiträge: 408
- Registriert: 11.10.2010 18:02
- Persönliche Nachricht:
Re: Visual Basic....
Mir fallen da als Laie zwei Möglichkeiten ein:
Die Variable als integer definieren. Somit sollte es zum Error kommen, wenn da jemand etwas anderes eingibt.
Eine modulo-Operation:
Kartenzahl minus mod(Kartenzahl) = 0. Wenn hier etwas anderes wie 0 heraus kommt, wurde eine Kommazahl eingegeben. Dann kannst du eine entsprechende Fehlermeldung ausgeben.
Ich wette, das Problem lässt sich eleganter und schöner lösen.
Die Variable als integer definieren. Somit sollte es zum Error kommen, wenn da jemand etwas anderes eingibt.
Eine modulo-Operation:
Kartenzahl minus mod(Kartenzahl) = 0. Wenn hier etwas anderes wie 0 heraus kommt, wurde eine Kommazahl eingegeben. Dann kannst du eine entsprechende Fehlermeldung ausgeben.
Ich wette, das Problem lässt sich eleganter und schöner lösen.

- machbetmu
- Beiträge: 848
- Registriert: 10.12.2006 18:50
- Persönliche Nachricht:
Re: Visual Basic....
Das einfachste ist vermutlich, es als Integer zu definieren, dann musst du allerdings den Fehler abfangen, sonst stürzt dein Programm ab. Kenne mich aber bei VB nicht mit Exceptions aus, bei Java würde das aber sehr einfach gehen, von daher denke ich dass VB das auch kann.
Ansonsten kannst du es mit Stringoperationen machen. Lies die Zahl als String ein, suche dann ob ein Komma oder ein Punkt darin ist, wenn ja gib eine Fehlermeldung aus. Wenn nein, ist es vermutlich eine ganze Zahl.
Bei der Methode berücksichtigst du aber nicht den Fall das jemand "zwanzig" eingibt, das heißt wenn das mit Exceptions nicht zu kompliziert ist, würde ich an deiner Stelle die erste Variante nehmen.
Ansonsten kannst du es mit Stringoperationen machen. Lies die Zahl als String ein, suche dann ob ein Komma oder ein Punkt darin ist, wenn ja gib eine Fehlermeldung aus. Wenn nein, ist es vermutlich eine ganze Zahl.
Bei der Methode berücksichtigst du aber nicht den Fall das jemand "zwanzig" eingibt, das heißt wenn das mit Exceptions nicht zu kompliziert ist, würde ich an deiner Stelle die erste Variante nehmen.
- machbetmu
- Beiträge: 848
- Registriert: 10.12.2006 18:50
- Persönliche Nachricht:
Re: Visual Basic....
Nachtrag: Nachfrage bei meinem Mitbewohner ergab, dass die Variante mit Exceptions funktioniert, nur dass diese bei Visual Basic halt Errors heißen. Es gibt aber wohl auch Methoden, mit denen direkt überprüft werden kann ob es ein gültiger Wert für Integer ist. Du hast also wirklich vielfältige Möglichkeiten.
-
- Beiträge: 40
- Registriert: 23.01.2010 16:06
- Persönliche Nachricht:
Re: Visual Basic....
Ich danke euch erstmal für eure schnelle Hilfe. Die Variablen hab ich alle bereits als Integer definiert, jedoch kommt es zum dem gleichen Ergebnis, dass ich die 2,2 immer noch eingeben kann
Kann auch sein das ich irgendein denk Fehler habe, am besten ich lad mal nen Scrrenshoot mit hoch^^
http://s7.directupload.net/images/131215/v92bp76j.jpg
http://s14.directupload.net/images/131215/fcaa35il.jpg
http://s1.directupload.net/images/131215/7pl3fa6e.jpg

Kann auch sein das ich irgendein denk Fehler habe, am besten ich lad mal nen Scrrenshoot mit hoch^^
http://s7.directupload.net/images/131215/v92bp76j.jpg
http://s14.directupload.net/images/131215/fcaa35il.jpg
http://s1.directupload.net/images/131215/7pl3fa6e.jpg
- Eirulan
- Beiträge: 13152
- Registriert: 12.10.2009 10:46
- Persönliche Nachricht:
Re: Visual Basic....
Ich würde das per Regex prüfen:
Public Function IsInteger(ByVal strNumber As String) As Boolean
Dim _RegexNotIntPattern As New System.Text.RegularExpressions.Regex("[^0-9-]")
Dim _RegexIntPattern As New System.Text.RegularExpressions.Regex("^-[0-9]+$|^[0-9]+$")
Return (Not _RegexNotIntPattern.IsMatch(strNumber) AndAlso _RegexIntPattern.IsMatch(strNumber))
End Function
Oder du sperrst Eingaben direkt beim Tastendruck:
Private Sub txtPhone_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrefix.KeyPress, txtAreaCode.KeyPress, txtSuffix.KeyPress
If (e.KeyChar < "0" OrElse e.KeyChar > "9") And (e.KeyChar <> Microsoft.VisualBasic.ChrW(46)) Then
If (e.KeyChar <> Microsoft.VisualBasic.ChrW(8) AndAlso e.KeyChar <> "DEL") Then
e.Handled = True
End If
End If
End Sub
Public Function IsInteger(ByVal strNumber As String) As Boolean
Dim _RegexNotIntPattern As New System.Text.RegularExpressions.Regex("[^0-9-]")
Dim _RegexIntPattern As New System.Text.RegularExpressions.Regex("^-[0-9]+$|^[0-9]+$")
Return (Not _RegexNotIntPattern.IsMatch(strNumber) AndAlso _RegexIntPattern.IsMatch(strNumber))
End Function
Oder du sperrst Eingaben direkt beim Tastendruck:
Private Sub txtPhone_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrefix.KeyPress, txtAreaCode.KeyPress, txtSuffix.KeyPress
If (e.KeyChar < "0" OrElse e.KeyChar > "9") And (e.KeyChar <> Microsoft.VisualBasic.ChrW(46)) Then
If (e.KeyChar <> Microsoft.VisualBasic.ChrW(8) AndAlso e.KeyChar <> "DEL") Then
e.Handled = True
End If
End If
End Sub
- Levi
- Beiträge: 44988
- Registriert: 18.03.2009 15:38
- Persönliche Nachricht:
Re: Visual Basic....
http://stackoverflow.com/questions/1341 ... sual-basic
http://msdn.microsoft.com/de-de/library ... -snippet-1
(ich finde es erschreckend, wie wenig bei mir von VB hängen geblieben ist XD)
@Tastendrucksperre über mir: irgend nen Hirni kommt eh auf die Idee mit Copy&Paste mal zu arbeiten
Code: Alles auswählen
Dim day As Integer
Dim valid As Boolean = Int32.TryParse(InputDan.Text, day)
(ich finde es erschreckend, wie wenig bei mir von VB hängen geblieben ist XD)
@Tastendrucksperre über mir: irgend nen Hirni kommt eh auf die Idee mit Copy&Paste mal zu arbeiten

- Eirulan
- Beiträge: 13152
- Registriert: 12.10.2009 10:46
- Persönliche Nachricht:
Re: Visual Basic....
TryParse ist ne gute Idee 
@Levi:
Dann fängt man halt Ctrl-V auch noch ab und das Kontextmenü lässt sich ja auch abstellen...


@Levi:
Dann fängt man halt Ctrl-V auch noch ab und das Kontextmenü lässt sich ja auch abstellen...

-
- Beiträge: 40
- Registriert: 23.01.2010 16:06
- Persönliche Nachricht:
Re: Visual Basic....
na dann werd ich das mal versuchen^^ ich dankke euch 
