AutoValidate Enum
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Determines how a control validates its data when it loses user input focus.
public enum class AutoValidate
public enum AutoValidate
type AutoValidate =
Public Enum AutoValidate
- Inheritance
Fields
Name | Value | Description |
---|---|---|
Inherit | -1 | The control inherits its AutoValidate behavior from its container (such as a form or another control). If there is no container control, it defaults to EnablePreventFocusChange. |
Disable | 0 | Implicit validation will not occur. Setting this value will not interfere with explicit calls to Validate() or ValidateChildren(). |
EnablePreventFocusChange | 1 | Implicit validation occurs when the control loses focus. |
EnableAllowFocusChange | 2 | Implicit validation occurs, but if validation fails, focus will still change to the new control. If validation fails, the Validated event will not fire. |
Examples
The following code example turns off implicit validation for a form and all of its contained controls, and instead manually performs validation of all of the form's children when a mouse button is clicked.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
using System.Text;
namespace TestValidation
{
class Form1 : Form
{
private static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
private TextBox firstNameBox, lastNameBox;
private Button validateButton;
private FlowLayoutPanel flowLayout1;
private Form1()
{
this.Load += new EventHandler(Form1_Load);
}
void Form1_Load(object sender, EventArgs e)
{
// Turn off validation when a control loses focus. This will be inherited by child
// controls on the form, enabling us to validate the entire form when the
// button is clicked instead of one control at a time.
this.AutoValidate = AutoValidate.Disable;
flowLayout1 = new FlowLayoutPanel();
flowLayout1.Dock = DockStyle.Fill;
flowLayout1.Name = "flowLayout1";
firstNameBox = new TextBox();
firstNameBox.Name = "firstNameBox";
firstNameBox.Size = new Size(75, firstNameBox.Size.Height);
firstNameBox.CausesValidation = true;
firstNameBox.Validating += new System.ComponentModel.CancelEventHandler(firstNameBox_Validating);
flowLayout1.Controls.Add(firstNameBox);
lastNameBox = new TextBox();
lastNameBox.Name = "lastNameBox";
lastNameBox.Size = new Size(75, lastNameBox.Size.Height);
lastNameBox.CausesValidation = true;
lastNameBox.Validating += new System.ComponentModel.CancelEventHandler(lastNameBox_Validating);
flowLayout1.Controls.Add(lastNameBox);
validateButton = new Button();
validateButton.Text = "Validate";
// validateButton.Location = new Point(170, 10);
validateButton.Size = new Size(75, validateButton.Size.Height);
validateButton.Click += new EventHandler(validateButton_Click);
flowLayout1.Controls.Add(validateButton);
this.Controls.Add(flowLayout1);
this.Text = "Test Validation";
}
void firstNameBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
if (firstNameBox.Text.Length == 0)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
void lastNameBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = false;
}
void validateButton_Click(object sender, EventArgs e)
{
if (this.ValidateChildren())
{
MessageBox.Show("Validation succeeded!");
}
else
{
MessageBox.Show("Validation failed.");
}
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Inherits Form
'Entry point which delegates to C-style main Private Function
Public Overloads Shared Sub Main()
Main(System.Environment.GetCommandLineArgs())
End Sub
Private Overloads Shared Sub Main(ByVal args() As String)
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
Private WithEvents FirstNameBox, LastNameBox As TextBox
Private WithEvents ValidateButton As Button
Private FlowLayout1 As FlowLayoutPanel
Private Sub New()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
' Turn off validation when a control loses focus. This will be inherited by child
' controls on the form, enabling us to validate the entire form when the
' button is clicked instead of one control at a time.
Me.AutoValidate = System.Windows.Forms.AutoValidate.Disable
FlowLayout1 = New FlowLayoutPanel()
FlowLayout1.Dock = DockStyle.Fill
FirstNameBox = New TextBox()
FirstNameBox.Name = "FirstNameBox"
FirstNameBox.Location = New Point(10, 10)
FirstNameBox.Size = New Size(75, FirstNameBox.Size.Height)
FirstNameBox.CausesValidation = True
FlowLayout1.Controls.Add(FirstNameBox)
LastNameBox = New TextBox()
LastNameBox.Name = "LastNameBox"
LastNameBox.Location = New Point(90, 10)
LastNameBox.Size = New Size(75, LastNameBox.Size.Height)
LastNameBox.CausesValidation = True
FlowLayout1.Controls.Add(LastNameBox)
ValidateButton = New Button()
ValidateButton.Text = "Validate"
ValidateButton.Location = New Point(170, 10)
ValidateButton.Size = New Size(75, ValidateButton.Size.Height)
FlowLayout1.Controls.Add(ValidateButton)
Me.Text = "Test Validation"
Me.Controls.Add(FlowLayout1)
End Sub
Private Sub FirstNameBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles FirstNameBox.Validating
If FirstNameBox.Text.Length = 0 Then
e.Cancel = True
Else
e.Cancel = False
End If
End Sub
Private Sub LastNameBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles LastNameBox.Validating
e.Cancel = False
End Sub
Private Sub ValidateButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ValidateButton.Click
If ValidateChildren() Then
MessageBox.Show("Validation succeeded!")
Else
MessageBox.Show("Validation failed.")
End If
End Sub
End Class
Remarks
If a user switches focus off of a Windows Forms control, the control will use AutoValidate to determine how to validate its data. This type of validation is called implicit validation, because it occurs without the application developer having to make an explicit call to Validate or ValidateChildren.
The property corresponding to this value will have different defaults based on the type of control. For more information, see User Input Validation in Windows Forms.