Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB2005, VB2008 | 07.09.09 |
NumericTextBox Control II Eine von der Standard TextBox abgeleitete Klasse, die nur numerische bzw. Dezimal-Eingaben erlaubt. | ||
Autor: Werner Kistner | Bewertung: | Views: 10.246 |
ohne Homepage | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Dieser Tipp erweitert die vor kurzem vorgestellte NumericTextBox-Klasse um die Möglichkeit, zusätzlich die erlaubten Dezimalstellen vorzugeben. Desweiteren wird auch das im System eingestellte Dezimaltrennzeichen korrekt berücksichtigt. Auch kann der Anwender nicht mehr Dezimalstellen eingeben, als erlaubt.
Imports System.ComponentModel Public Class NumericTextBox Inherits TextBox Private _decimal As Integer = 0 Private stDecimal As String Protected Overrides Sub OnKeyPress( _ ByVal e As System.Windows.Forms.KeyPressEventArgs) MyBase.OnKeyPress(e) Select Case Asc(e.KeyChar) Case 8 ' Backspace Case 48 To 57 ' Zahlen If DecimalCont <> 0 AndAlso Me.SelectionLength < 1 Then If Me.Text.Contains(stDecimal) AndAlso _ Me.SelectionStart > Me.Text.IndexOf(stDecimal) Then If Len(Mid(Me.Text, IIf(InStr(Me.Text, stDecimal) = 0, 1, _ InStr(Me.Text, stDecimal)))) > DecimalCont Then e.Handled = True End If End If End If Case Asc(String.Format("{0:0.0}", 0).Chars(1)) ' Decimaltrennzeichen ' Dezimaltrennzeichen zulassen(DecimalZahl <> 0) ' bzw.unterdrücken(DecimalZahl = 0) If DecimalCont = 0 Then e.Handled = True Else If Me.Text.Contains(stDecimal) Then e.Handled = True End If Case Else e.Handled = True End Select End Sub ''' <summary> ''' Legt die Anzahl der Dezimalstellen fest oder gibt diese zurück. ''' </summary> <Description("Anzahl der erlaubten Dezimalstellen")> _ <Category("Numeric")> _ Public Property DecimalCont() As Integer Get Return _decimal End Get Set(ByVal value As Integer) _decimal = value End Set End Property Public Sub New() ' Dezimal-Trennzeichen ermitteln stDecimal = String.Format("{0:0.0}", 0).Chars(1) End Sub End Class