ContainerControl.ValidateChildren ContainerControl.ValidateChildren ContainerControl.ValidateChildren ContainerControl.ValidateChildren Method

定義

使得控制項內支援驗證的所有子控制項驗證其資料。Causes all of the child controls within a control that support validation to validate their data.

多載

ValidateChildren() ValidateChildren() ValidateChildren() ValidateChildren()

使得控制項內支援驗證的所有子控制項驗證其資料。Causes all of the child controls within a control that support validation to validate their data.

ValidateChildren(ValidationConstraints) ValidateChildren(ValidationConstraints) ValidateChildren(ValidationConstraints)

使得控制項內支援驗證的所有子控制項驗證其資料。Causes all of the child controls within a control that support validation to validate their data.

ValidateChildren() ValidateChildren() ValidateChildren() ValidateChildren()

使得控制項內支援驗證的所有子控制項驗證其資料。Causes all of the child controls within a control that support validation to validate their data.

public:
 virtual bool ValidateChildren();
[System.ComponentModel.Browsable(false)]
public virtual bool ValidateChildren ();
abstract member ValidateChildren : unit -> bool
override this.ValidateChildren : unit -> bool
Public Overridable Function ValidateChildren () As Boolean

傳回

如果所有子控制項都驗證成功,則為 true;否則為 falsetrue if all of the children validated successfully; otherwise, false. 如果從 ValidatingValidated 事件處理常式呼叫這個方法,則該方法一律會傳回 falseIf called from the Validating or Validated event handlers, this method will always return false.

範例

下列程式碼範例會關閉表單及其所有內含控制項的隱含驗證,並在按一下滑鼠按鍵時,以手動方式執行所有表單子系的驗證。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

備註

ValidateChildren將會繼承控制項的階層,並檢查每個控制項,以查看它是否支援驗證。ValidateChildren will descend a control's hierarchy and examine each control to see if it supports validation. 如果使用者可以選取控制項CausesValidation ,而且其屬性為trueValidateChildren則會導致Validating事件發生。If the control can be selected by the user and its CausesValidation property is true, ValidateChildren will cause the Validating event to occur. 如果有任何控制項取消Validating事件,則這個方法false會傳回, true否則會傳回。If any of the controls cancel the Validating event, this method will return false; otherwise, it will return true.

如果控制項系結至資料來源,而且發生此Validating事件,則會導致控制項將其目前的資料推送回資料來源。If a control is bound to a data source, and the Validating event occurs, it will cause the control to push its current data back to the data source.

呼叫ValidateChildren相當於使用ValidateChildren ValidationConstraints的呼叫。NoneCalling ValidateChildren is equivalent to calling ValidateChildren with a ValidationConstraints of None.

ValidateChildren(ValidationConstraints) ValidateChildren(ValidationConstraints) ValidateChildren(ValidationConstraints)

使得控制項內支援驗證的所有子控制項驗證其資料。Causes all of the child controls within a control that support validation to validate their data.

public:
 virtual bool ValidateChildren(System::Windows::Forms::ValidationConstraints validationConstraints);
[System.ComponentModel.Browsable(false)]
public virtual bool ValidateChildren (System.Windows.Forms.ValidationConstraints validationConstraints);
abstract member ValidateChildren : System.Windows.Forms.ValidationConstraints -> bool
override this.ValidateChildren : System.Windows.Forms.ValidationConstraints -> bool

參數

validationConstraints
ValidationConstraints ValidationConstraints ValidationConstraints ValidationConstraints

將限制套用於已引發 Validating 事件的控制項。Places restrictions on which controls have their Validating event raised.

傳回

如果所有子控制項都驗證成功,則為 true;否則為 falsetrue if all of the children validated successfully; otherwise, false. 如果從 ValidatingValidated 事件處理常式呼叫這個方法,則該方法一律會傳回 falseIf called from the Validating or Validated event handlers, this method will always return false.

範例

下列程式碼範例只Validating會針對其Enabled屬性為true之表單的直屬子系,產生事件。The following code example will only cause the Validating event to occur for immediate children of the form whose Enabled property is true.

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace ValidateChildrenWithConstraints
{
    class Form1 : Form
    {
        public static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }

        private Form1()
        {
            this.Load += new EventHandler(Form1_Load);
        }

        void Form1_Load(object sender, EventArgs e)
        {
            // Create controls on form.
            TextBox textBox1, textBox2, textBox3;
            FlowLayoutPanel flowPanel1;
            TextBox subTextBox1;
            Button button1;

            this.Size = new Size(500, 300);
            this.AutoValidate = AutoValidate.Disable;

            textBox1 = new TextBox();
            textBox1.Location = new Point(20, 20);
            textBox1.Size = new Size(75, textBox1.Size.Height);
            textBox1.CausesValidation = true;
            textBox1.Validating += new System.ComponentModel.CancelEventHandler(textBox1_Validating);
            this.Controls.Add(textBox1);

            textBox2 = new TextBox();
            textBox2.Location = new Point(105, 20);
            textBox2.Size = new Size(75, textBox2.Size.Height);
            textBox2.CausesValidation = true;
            textBox2.Validating += new System.ComponentModel.CancelEventHandler(textBox2_Validating);
            this.Controls.Add(textBox2);

            textBox3 = new TextBox();
            textBox3.Location = new Point(190, 20);
            textBox3.Size = new Size(75, textBox3.Size.Height);
            textBox3.Enabled = false;
            textBox3.CausesValidation = true;
            textBox3.Validating += new System.ComponentModel.CancelEventHandler(textBox3_Validating);
            this.Controls.Add(textBox3);

            button1 = new Button();
            button1.Text = "Click";
            button1.Location = new Point(270, 20);
            button1.Click += new EventHandler(button1_Click);
            this.Controls.Add(button1);

            flowPanel1 = new FlowLayoutPanel();
            flowPanel1.Size = new Size(400, 100);
            flowPanel1.Dock = DockStyle.Bottom;
            subTextBox1 = new TextBox();
            subTextBox1.CausesValidation = true;
            subTextBox1.Validating += new System.ComponentModel.CancelEventHandler(subTextBox1_Validating);
            flowPanel1.Controls.Add(subTextBox1);
            this.Controls.Add(flowPanel1);
        }

        void subTextBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            MessageBox.Show("subTextBox1 Validating!");
        }

        void textBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            MessageBox.Show("textBox1 Validating!");
        }

        void textBox2_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            MessageBox.Show("textBox2 Validating!");
        }

        void textBox3_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            MessageBox.Show("textBox3 Validating!");
        }

        void button1_Click(object sender, EventArgs e)
        {
            this.ValidateChildren(ValidationConstraints.ImmediateChildren | ValidationConstraints.Enabled);
        }
    }
}
Imports System.Drawing
Imports System.Windows.Forms

Namespace ValidateChildrenWithConstraints
    _
    Class Form1
        Inherits Form

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

        Private Sub New()
            AddHandler Me.Load, AddressOf Form1_Load
        End Sub

        Dim WithEvents TextBox1, TextBox2, TextBox3 As TextBox
        Dim FlowPanel1 As FlowLayoutPanel
        Dim WithEvents SubTextBox1 As TextBox
        Dim WithEvents Button1 As Button

        Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
            ' Create controls on form.

            Me.Size = New Size(500, 300)
            Me.AutoValidate = AutoValidate.Disable

            TextBox1 = New TextBox()
            TextBox1.Location = New Point(20, 20)
            TextBox1.Size = New Size(75, TextBox1.Size.Height)
            TextBox1.CausesValidation = True
            Me.Controls.Add(TextBox1)

            TextBox2 = New TextBox()
            TextBox2.Location = New Point(105, 20)
            TextBox2.Size = New Size(75, TextBox2.Size.Height)
            TextBox2.CausesValidation = True
            Me.Controls.Add(TextBox2)

            TextBox3 = New TextBox()
            TextBox3.Location = New Point(190, 20)
            TextBox3.Size = New Size(75, TextBox3.Size.Height)
            TextBox3.Enabled = False
            TextBox3.CausesValidation = True
            Me.Controls.Add(TextBox3)

            Button1 = New Button()
            Button1.Text = "Click"
            Button1.Location = New Point(270, 20)
            Me.Controls.Add(Button1)

            FlowPanel1 = New FlowLayoutPanel()
            FlowPanel1.Size = New Size(400, 100)
            FlowPanel1.Dock = DockStyle.Bottom
            SubTextBox1 = New TextBox()
            SubTextBox1.CausesValidation = True
            FlowPanel1.Controls.Add(SubTextBox1)
            Me.Controls.Add(FlowPanel1)
        End Sub


        Sub SubTextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SubTextBox1.Validating
            MessageBox.Show("SubTextBox1 Validating!")
        End Sub


        Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
            MessageBox.Show("TextBox1 Validating!")
        End Sub


        Sub TextBox2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating
            MessageBox.Show("TextBox2 Validating!")
        End Sub


        Sub TextBox3_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox3.Validating
            MessageBox.Show("TextBox3 Validating!")
        End Sub


        Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click
            Me.ValidateChildren((ValidationConstraints.ImmediateChildren Or ValidationConstraints.Enabled))
        End Sub
    End Class
End Namespace 'ValidateChildrenWithConstraints

備註

ValidateChildren會檢查目前控制項的所有子系,使Validating事件發生在控制項上(如果它符合所拼ValidationConstraints出的準則)。ValidateChildren will examine all the children of the current control, causing the Validating event to occur on a control if it meets the criteria spelled out by ValidationConstraints.

您可以藉由ValidationConstraints將它們與位 or 運算子結合,一次使用數個參數。You may use several ValidationConstraints parameters at once by combining them with a bitwise OR operator. 將參數與位 OR 運算子結合,會產生邏輯 AND 運算。Combining parameters with a bitwise OR operator will result in a logical AND operation. 例如,呼叫ValidateChildren(ValidationConstraints.ImmediateChildren | ValidationConstraints.Enabled)只會在同時為Validating容器的直屬子系且已啟用的控制項上引發事件。For example, calling ValidateChildren(ValidationConstraints.ImmediateChildren | ValidationConstraints.Enabled) will only raise the Validating event on controls that are both immediate children of the container AND are enabled.

無論您為這個方法指定的參數為何,控制項都必須將其CausesValidation屬性設定為true ,才Validating會發生事件。Regardless of which parameters you specify for this method, a control must have its CausesValidation property set to true in order for its Validating event to occur. 您也應該將控制項AutoValidate或控制項容器的屬性設定為,以便false只有在呼叫ValidateChildren時才會執行驗證,而不是在使用者從控制項中轉移焦點時才會發生。You should also set the AutoValidate property of the control or of the control's container to false if you want validation to happen only when you call ValidateChildren, and not when the user shifts focus from the control.

如果控制項系結至資料來源,而且發生此Validating事件,則會導致控制項將其目前的資料推送回資料來源。If a control is bound to a data source, and the Validating event occurs, it will cause the control to push its current data back to the data source.

您無法藉由套用位否定運算子ValidationConstraints來達到參數的相反效果。You cannot achieve the opposite effect of a ValidationConstraints parameter by applying a bitwise negation operator. 例如,如果您將Visible欄位的負值提供給ValidateChildren,它將不會驗證在容器上看不到的所有子系。For example, if you supply the negative value of the Visible field to ValidateChildren, it will not validate all children that are not visible on the container. 將任何負參數提供ValidateChildren給將不會影響容器或其子系。Supplying any negative parameter to ValidateChildren will have no effect on the container or its children.

適用於