Beispiel-Validierung mit dem ErrorProvider
Frank Dzaebel, erstellt am: 8.10.2005,
zuletzt geändert: 11.4.2007
Kategorie: Windows Forms,
.NET-Version: 1.1/2.0, [Download]
Der Beispiel-Code zeigt exemplarisch eine mögliche Implementierungs-Strategie
für die Validierung mit dem ErrorProvider bei Windows Forms. Die this.Controls (der Form) werden rekursiv
durchlaufen und allen TextBox'en dabei eine Validating-Event-Behandlung zugefügt.
Diese kann dann allgemein an einer Stelle abgefragt und implementiert werden.
Weiterführende Literatur:
[Validierung
von Daten in Steuerelementen in Windows Forms]
(->Schließen des Formulars und Außerkraftsetzen der Validierung)
[Validierung
von Benutzereingaben in Windows Forms]
[Extending Windows Forms with a Custom Validation Component Library
Part1,
Part2,
Part3 ]
[Control.Validated-Ereignis]
[Control.CausesValidation-Eigenschaft]
[ContainerControl.Validate-Methode]
[Control.Validating-Ereignis]
using System;
using System.Windows.Forms;
using System.ComponentModel;
namespace MultipleValidation
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ValidierungZufügen(Control control)
{
foreach (Control ctl in control.Controls)
{
if (ctl.Controls.Count > 0) ValidierungZufügen(ctl);
if (ctl is TextBox)
((TextBox)ctl).Validating += new CancelEventHandler(AllTextBoxes_Validating);
}
}
/// <summary>returns true, if the control is in error. This means:
/// control.property == assertObject sets the ErrorProvider accordingly</summary>
private bool IsError(Control control, string property, object assertObject, string errorText)
{
bool isError;
if (property == "<Zahl>")
{
int result; int.TryParse(control.Text, out result);
isError = (result == 0);
}
else
{
object val = control.GetType().GetProperty(property).GetValue(control, null);
isError = (assertObject == null ? val == assertObject : val.Equals(assertObject));
}
if (isError) errorControls.SetError(control, errorText);
else errorControls.SetError(control, "");
return isError;
}
/// <summary>returns true, if no Control is in Error, else false.
/// Also the ErrorProvider will be set accordingly.</summary>
private bool IsAllValid()
{
if (IsError(txbArtikelName, "Text", "", "Bitte Artikelname eingeben!")) return false;
if (IsError(txbPreisMeter, "Text", "", "Bitte Peis eingeben!")) return false;
if (IsError(txbArtikelNummer, "<Zahl>", "", "Bitte Artikelnummer (ungleich 0) eingeben!")) return false;
if (IsError(cmbStoffBreite, "Text", "bitte wählen", "Bitte Stoffbreite auswählen!")) return false;
if (IsError(cmbMaterial, "Text", "bitte wählen", "Bitte Material auswählen!")) return false;
if (IsError(cmbWaschanleitung, "Text", "bitte wählen", "Bitte Waschanleitung auswählen!")) return false;
if (IsError(dateTimePicker, "Value", DateTime.Now, "Bitte ein Datum als heute auswählen!")) return false;
return true;
}
private void AllTextBoxes_Validating(object sender, CancelEventArgs e)
{ IsAllValid();
}
private void Form1_Load(object sender, EventArgs e)
{
dateTimePicker.Value = DateTime.Now;
ValidierungZufügen(this);
}
}
}