VB.NET-Tipp 0083: Fehleingaben abfangen - das Control.Validating() - Event (und ErrorProvider)
von Spatzenkanonier
Beschreibung
Visual Basic bietet ein gut durchdachtes Konzept zur Validierung von Eingaben: Will der Benutzer den Fokus von einem Eingabe-Steuerelement wegnehmen, so sendet dieses Steuerelement zunächst das Validating-Event. Im Ereignisbehandlungscode kann geprüft werden, ob die bisherige Eingabe gültig ist, falls nicht, kann man e.Cancel auf True setzen, wodurch der Fokus im Steuerelement festgehalten wird. Ein pures Festhalten des Fokus' wird den User eher verwirren, also sollte man ihm noch eine Fehleingabe-Meldung zukommen lassen, beispielsweise mit der ErrorProvider-Komponente.
Das Konzept geht aber noch weiter: bestimmte Steuerelemente (hier: der Help-Button) kann man mit ".CausesValidation = False" so einstellen, dass sie erreicht werden können, auch wenn eine Fehleingabe vorliegt und der Fokus eigentlich fixiert ist.
Weiterhin kann man auch Container-Steuerelemente validieren. Auf diese Weise lässt sich einrichten, dass innerhalb einer Gruppe von Steuerelementen der Fokus gewechselt, aber nicht der Container (hier: pnlGroupValidation) verlassen werden kann, solange Fehleingaben in einem seiner aufsitzenden Steuerelemente vorliegen.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2005 ' Option Strict: An ' ' Referenzen: ' - System ' - System.Data ' - System.Drawing ' - System.Windows.Forms ' - System.Xml ' ' Imports: ' - Microsoft.VisualBasic ' - Microsoft.VisualBasic.ControlChars ' - System ' - System.Collections ' - System.Collections.Generic ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' ' ############################################################################## ' ############################# frmErrProvider.vb ############################## ' ############################################################################## Imports System.ComponentModel Public Class frmErrProvider Private Sub SingleValidation_Validating(ByVal sender As Object, _ ByVal e As CancelEventArgs) Handles txtSingleValidation.Validating Me.ErrProvider.Clear() Dim TB As TextBox = DirectCast(sender, TextBox) If TB.Text <> "a" Then e.Cancel = True Me.ErrProvider.SetError(TB, "Bitte 'a' eingeben") End If End Sub ''' <remarks> ''' Dieses Buttons "CauseValidation"-Property ist auf False gestellt, ''' sodaß er auch bei Fehleingaben betätigt werden kann. ''' </remarks> Private Sub btHelp_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles btHelp.Click MsgBox("Hilfe!!!") End Sub ''' <remarks> ''' Die Validierung von txtGroupValidationB und txtGroupValidationC ''' findet im .Validating() der Groupbox grpGroupValidation statt, auf ''' dem die beiden aufsitzen ''' </remarks> Private Sub grpGroupValidation_Validating(ByVal sender As Object, _ ByVal e As CancelEventArgs) Handles grpGroupValidation.Validating Me.ErrProvider.Clear() If txtGroupValidationB.Text <> "b" Then e.Cancel = True Me.ErrProvider.SetError(txtGroupValidationB, "Bitte 'b' eingeben") ElseIf txtGroupValidationC.Text <> "c" Then e.Cancel = True Me.ErrProvider.SetError(txtGroupValidationC, "Bitte 'c' eingeben") End If End Sub Private Sub btAction_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles btAction.Click MsgBox("Validierung offenbar erfolgreich") End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.