Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0083: Fehleingaben abfangen - das Control.Validating() - Event (und ErrorProvider)

 von 

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:

Schwierigkeitsgrad 1

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:

Download des Beispielprojektes [12,71 KB]

' 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.