Nur Zahlen in TextBox und Eine Rechung. Problem

Jukkales

Erfahrenes Mitglied
Ich bei neu in VB.Net und wollte was fargen.

1. Wie kann ich einstellen das nur Zahlen in einer Textbox erlaubt sind.
2. Wie kann man "Rechnen"

Label5.Text = TextBox2 / 31 / TextBox1
Label6.Text = TextBox2 / 31 / TextBox1 / 24

sollen die Rechnugen sein. Wie geht das. bitte um schnelle hilfe
 
Zuletzt bearbeitet:
Hallo Jukkales,

ob es sich in der Textbox um einen numerischen Wert handelt
kannst du im Validating Ereignis mit

If IsNumeric(Textbox1.Text) Then
' Wert in Textbox ist numerisch
End if

>>Label5.Text = TextBox2 / 31 / TextBox1
>>Label6.Text = TextBox2 / 31 / TextBox1 / 24

das könnte so aussehen wenn ich das richtig interpretiere.

Label5.Text = CDbl(TextBox2.Text) / 31 / CDbl(TextBox1.Text)
Label6.Text = CDbl(TextBox2.Text) / 31 / CDbl(TextBox1.Text) / 24

Gruß
Jens
 
Hallo!
Ich möchte ebenfalls bei einer Textbox nur numerische Eingaben haben, allerdings will ich nicht das Validate-Ereignis verwenden. Ich möchte lieber von vorn herein das KeyPress-Ereignis überprüfen, so dass wenn der Benutzer eine Taste drückt, diese nur anerkannt wird, wenn es eine Ziffer ist. Im alten VB 6.0 hab ich da einfach im KeyPress-Ereignis die Variable KeyAscii auf 0 gesetzt, dann hat die Textbox die Taste nicht angenommen. Aber wie mache ich das mit VB.Net?

Ich finde es nämlich nervig, wenn man irgendwo viele Textfelder ausfüllt, dann auf einen Okay-Button klickt und das Programm dann erst meckert, dass die Eingaben ungültig sind.
 
Hatte das Selbe Problem und hab das ganze mit eigenen TextBoxen realisiert.
Die TextBox werden von einer normalen TextBox vererbt, bekommt aber zusätzlich weitere Eigenschaften.

Bei mir die Eigenschaft "Feldart" und da steht dann z.B.: Zahlen.
In der TextBox wird dann die Eingabe überprüft.

Diese Feldart hab ich dann noch auf viele andere Arten ausgeweitet. (Datum, Gleitzahl usw.).

So ziehe ich die TextBox im Designer aufs Fenster, gebe die Art vor und muss mich um nix weiter kümmern.

mfg
 
Ich hab das jetzt so gemacht:
Ähnlich wie eddieromm hab ich eine neue Klasse gemacht, die eine Textbox erbt.

Dann habe ich ein Override von "OnTextChanged" gemacht und überprüfe dort die Texteingabe. Wenn die Texteingabe nicht numerisch ist, dann wird der letzte Text wiederhergestellt:
Code:
PublicClass Zahleingabe
 
Inherits System.Windows.Forms.TextBox
 
Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs) 
'SUB: Überprüft den neuen Text der Textbox. Ist dieser nicht numerisch, so wird der letzte gültige numerische Text wiederhergestellt.
 
Static strLastText As String = Me.Text
 

 
blnSubAktiv = True
 
With Me 
If Not IsNumeric(.Text) Then 
'letzten numerischen Text wiederherstellen 
.Text = strLastText 
Else 
strLastText = .Text 

'Originalmethode von Textbox aufrufen:
MyBase.OnTextChanged(e)
End If
 
End With 

End Sub
 
EndClass
Ich hab den Code etwas gekürzt, so dass nur das wesentliche Prinzi dargestellt wird.
 
Soweit ich mich erinnere gibt es die KeyPress bzw. KeyUp/Down Ereignisse bei einer Textbox. Mit den EventArgs.Cancel die übergeben werden, kann man die Tastenauswirkung abbrechen.
Diese Variante ist sinnvoll, wenn Maskierte/Feststehende Zahlen eingegeben werden sollen. Wie zum Beispiel ein Datum, dessen Werte man hintereinander wegschreibt ohne den punkt eingeben zu müssen.
 
Shakie hat gesagt.:
Ich finde es nämlich nervig, wenn man irgendwo viele Textfelder ausfüllt, dann auf einen Okay-Button klickt und das Programm dann erst meckert, dass die Eingaben ungültig sind.
Das Validating-Event einer TextBox wird nicht erst beim Klick auf OK oder ähnlich ausgelöst sondern wenn das Control den Focus verliert. Es wird also schon "gemerkert", wenn du mit der Eingabe in einem Feld fertig bist.
Außerdem fände ich es eher verwirrend wenn man versucht in eine TextBox was einzugeben, es sich aber nichts tut.
 
mage hat gesagt.:
Mit den EventArgs.Cancel die übergeben werden, kann man die Tastenauswirkung abbrechen.

Das "Cancel" finde ich nicht. Die EventArgs sind beim KeyDown-Ereignis vom Typ System.Windows.Forms.KeyEventArgs und da stehen nur folgende Eigenschaften zur Verfügung:
  • Alt As Boolean
  • Control As Boolean
  • Handled As Boolean
  • KeyCode As System.Windows.Forms.Keys
  • KeyData As System.Windows.Forms.Keys
  • KeyValue As Integer
  • Modifiers As System.Windows.Forms.Keys
  • Shift As Boolean
Und das sind alles ReadOnly-Properties, außer "Handled".
@mage: Kannst du bitte einen kurzen Beispielcode posten?

niggo hat gesagt.:
Das Validating-Event einer TextBox wird nicht erst beim Klick auf OK oder ähnlich ausgelöst sondern wenn das Control den Focus verliert.
Stimmt. Trotzdem finde ich es besser, wenn man ungültige Eingaben gar nicht erst machen kann.

niggo hat gesagt.:
Außerdem fände ich es eher verwirrend wenn man versucht in eine TextBox was einzugeben, es sich aber nichts tut.
Stimmt auch ;) Aber es könnte ja ein Beep-Sound kommen oder ein BalloonTip, der sagt was man eingeben darf und was nicht.
 
hallo eddieromm,
du hast eine eigene klasse für deine TextBox gemacht, die von der Form.TextBox erbt?
Aber wie hast du das hinbekommen, dass deine eigene Klasse im Designer verwendet werden kann?

lg, yanick
 

Neue Beiträge

Zurück