163 lines
5.2 KiB
VB.net
163 lines
5.2 KiB
VB.net
Imports System.ComponentModel
|
|
|
|
Public Class MyTextBox
|
|
Inherits System.Windows.Forms.TextBox
|
|
Implements INotifyPropertyChanged
|
|
Property _numbersOnly As Boolean = False
|
|
Property _ShortDateOnly As Boolean = False
|
|
Property _Waehrung As Boolean = False
|
|
Property _Prozent As Boolean = False
|
|
Property _useAsBindingText As Boolean = False
|
|
|
|
|
|
Public Sub New()
|
|
|
|
If _Waehrung Then MyBase.TextAlign = HorizontalAlignment.Right
|
|
' Me.Focus()
|
|
End Sub
|
|
|
|
Private Sub MyTextBox_BindingContextChanged(sender As Object, e As EventArgs) Handles Me.BindingContextChanged
|
|
' If _ShortDateOnly Then
|
|
'If IsDate(sender.text) Then sender.text = CDate(sender.text).ToShortDateString
|
|
' End If
|
|
|
|
' If _Waehrung Then
|
|
'If IsNumeric(sender.text) Then sender.text = String.Format("{0:N2}", CDbl(sender.text))
|
|
'End If
|
|
End Sub
|
|
|
|
|
|
' Sub fillWithSQL(sql As String, Optional conn As String = "SDL")
|
|
' Me._value = (New SQL).getValueTxtBySql(sql, conn)
|
|
' End Sub
|
|
|
|
Private Sub MyTextBox_KeyDown(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
|
|
If _numbersOnly Then
|
|
If (Microsoft.VisualBasic.Asc(e.KeyChar) < 48) _
|
|
Or (Microsoft.VisualBasic.Asc(e.KeyChar) > 57) Then
|
|
e.Handled = True
|
|
End If
|
|
If (Microsoft.VisualBasic.Asc(e.KeyChar) = 8) Then
|
|
e.Handled = False
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub MyTextBox_Layout(sender As Object, e As LayoutEventArgs) Handles Me.Layout
|
|
MyBase.CausesValidation = True
|
|
If _ShortDateOnly Then MyBase.MaxLength = 10
|
|
End Sub
|
|
|
|
Private Sub MyTextBox_Leave(sender As Object, e As EventArgs) Handles Me.Leave
|
|
' If _DateOnly AndAlso Not isShortDate(sender.text) Then sender.focus()
|
|
If _Waehrung Then
|
|
Try
|
|
sender.text = String.Format("{0:N2}", CDbl(sender.text))
|
|
sender.ForeColor = System.Drawing.Color.Black
|
|
Catch ex As Exception
|
|
sender.ForeColor = System.Drawing.Color.Red
|
|
End Try
|
|
|
|
End If
|
|
|
|
If _Prozent Then
|
|
Try
|
|
_value = CDbl(sender.text.ToString.Replace("%", "")) / 100
|
|
Catch ex As Exception
|
|
sender.ForeColor = System.Drawing.Color.Red
|
|
_value = Propvalue
|
|
End Try
|
|
End If
|
|
If _useAsBindingText Then
|
|
_value = sender.text.ToString
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Private Sub MyTextBox_Textchanged(sender As Object, e As EventArgs) Handles Me.TextChanged
|
|
sender.ForeColor = System.Drawing.Color.Black
|
|
If _numbersOnly Then
|
|
If Not IsNumeric(sender.text) Then sender.ForeColor = System.Drawing.Color.Red
|
|
End If
|
|
If _ShortDateOnly Then
|
|
If Not isShortDate(sender.text) Then sender.ForeColor = System.Drawing.Color.Red
|
|
End If
|
|
If _Waehrung Then
|
|
Try
|
|
sender.text = String.Format("{0:N2}", CDbl(sender.text))
|
|
Catch ex As Exception
|
|
sender.ForeColor = System.Drawing.Color.Red
|
|
End Try
|
|
End If
|
|
End Sub
|
|
Function isShortDate(d) As Boolean
|
|
Return CBool(IsDate(d) And d.length = 10)
|
|
End Function
|
|
|
|
|
|
Public Propvalue As String
|
|
Public Property _value As String
|
|
Get
|
|
Return Propvalue
|
|
End Get
|
|
Set(v As String)
|
|
If _Prozent Then
|
|
Propvalue = v
|
|
MyBase.Text = String.Format("{0:P2}", CDbl(Propvalue))
|
|
OnPropertyChanged("_value")
|
|
End If
|
|
If _useAsBindingText Then
|
|
Propvalue = v
|
|
MyBase.Text = Propvalue
|
|
OnPropertyChanged("_value")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
|
|
Public Event PropertyChanged As PropertyChangedEventHandler _
|
|
Implements INotifyPropertyChanged.PropertyChanged
|
|
|
|
Protected Sub OnPropertyChanged(ByVal name As String)
|
|
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name))
|
|
End Sub
|
|
|
|
Private Sub MyTextBox_Validating(sender As Object, e As CancelEventArgs) Handles Me.Validating
|
|
If sender.text = "" Then e.Cancel = False : Exit Sub 'wenn der Test leer ist, stimmt die Eingabe
|
|
|
|
Dim errMessage As String = "Es ist ein Validierungsfehler aufgetreten:" & vbNewLine
|
|
Dim errDescription As String = "Überprüfen Sie die Eingabe!"
|
|
|
|
If _Waehrung Then
|
|
Try
|
|
String.Format("{0:N2}", CDbl(sender.text))
|
|
e.Cancel = False
|
|
Catch ex As Exception
|
|
errDescription = "Die Eingabe muss eine Zahl sein! (z.B. 123,45)"
|
|
e.Cancel = True
|
|
End Try
|
|
End If
|
|
|
|
If _Prozent Then
|
|
e.Cancel = False
|
|
End If
|
|
|
|
If _ShortDateOnly Then
|
|
If isShortDate(sender.text) Then
|
|
e.Cancel = False
|
|
Else
|
|
e.Cancel = True
|
|
End If
|
|
End If
|
|
|
|
If e.Cancel Then
|
|
MsgBox(errMessage & errDescription)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub MyTextBox_Validated(sender As Object, e As EventArgs) Handles Me.Validated
|
|
|
|
'Wenns stimmt
|
|
End Sub
|
|
End Class
|