ContainerControl.AutoValidate ContainerControl.AutoValidate ContainerControl.AutoValidate ContainerControl.AutoValidate Property


获取或设置一个值,该值指示当焦点更改时是否自动验证此容器内的控件。Gets or sets a value that indicates whether controls in this container will be automatically validated when the focus changes.

 virtual property System::Windows::Forms::AutoValidate AutoValidate { System::Windows::Forms::AutoValidate get(); void set(System::Windows::Forms::AutoValidate value); };
public virtual System.Windows.Forms.AutoValidate AutoValidate { get; set; }
member this.AutoValidate : System.Windows.Forms.AutoValidate with get, set
Public Overridable Property AutoValidate As AutoValidate


指示焦点更改时是否隐式验证所含控件的 AutoValidate 枚举值。An AutoValidate enumerated value that indicates whether contained controls are implicitly validated on focus change. 默认值为 InheritThe default is Inherit.


使用了无效的 AutoValidate 值设置此属性。A AutoValidate value that is not valid was used to set this property.


下面的代码示例将关闭窗体及其包含的所有控件的隐式验证, 并在单击鼠标按钮时手动执行窗体的所有子级的验证。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.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);

            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);

            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);


            this.Text = "Test Validation";

        void firstNameBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
            if (firstNameBox.Text.Length == 0)
                e.Cancel = true;
                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!");
                MessageBox.Show("Validation failed.");
Imports System
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()
    End Sub

    Private Overloads Shared Sub Main(ByVal args() As String)
        Application.Run(New Form1())
    End Sub 'Main

    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

        LastNameBox = New TextBox()
        LastNameBox.Name = "LastNameBox"
        LastNameBox.Location = New Point(90, 10)
        LastNameBox.Size = New Size(75, LastNameBox.Size.Height)
        LastNameBox.CausesValidation = True

        ValidateButton = New Button()
        ValidateButton.Text = "Validate"
        ValidateButton.Location = New Point(170, 10)
        ValidateButton.Size = New Size(75, ValidateButton.Size.Height)

        Me.Text = "Test Validation"

    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
            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!")
            MessageBox.Show("Validation failed.")
        End If
    End Sub
End Class


每个控件的AutoValidate默认值都不同。The default value for AutoValidate will differ for each control. 有关隐式验证的更多详细信息, 请参阅中的用户输入验证 Windows 窗体For more details on implicit validation, see User Input Validation in Windows Forms.

如果将此属性设置为新值, 则AutoValidateChanged会引发事件。Setting this property to a new value will raise the AutoValidateChanged event.