ContainerControl.ValidateChildren Méthode

Définition

Provoque la validation des données de tous les contrôles enfants d’un contrôle qui prennent en charge la validation.

Surcharges

ValidateChildren()

Provoque la validation des données de tous les contrôles enfants d’un contrôle qui prennent en charge la validation.

ValidateChildren(ValidationConstraints)

Provoque la validation des données de tous les contrôles enfants d’un contrôle qui prennent en charge la validation.

ValidateChildren()

Source:
ContainerControl.cs
Source:
ContainerControl.cs
Source:
ContainerControl.cs

Provoque la validation des données de tous les contrôles enfants d’un contrôle qui prennent en charge la validation.

[System.ComponentModel.Browsable(false)]
public virtual bool ValidateChildren ();

Retours

true si la validation de tous les enfants est réussie ; sinon, false. Si cette méthode est appelée à partir des gestionnaires d’événements Validating ou Validated, elle retourne toujours false.

Attributs

Exemples

L’exemple de code suivant désactive la validation implicite pour un formulaire et tous ses contrôles contenus, et effectue manuellement la validation de tous les enfants du formulaire lorsqu’un clic sur un bouton de souris est activé.

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.");
            }
        }
    }
}

Remarques

ValidateChildren descend la hiérarchie d’un contrôle et examine chaque contrôle pour voir s’il prend en charge la validation. Si le contrôle peut être sélectionné par l’utilisateur et que sa CausesValidation propriété est true, ValidateChildren l’événement Validating se produit. Si l’un des contrôles annule l’événement Validating , cette méthode retourne false; sinon, elle retourne true.

Si un contrôle est lié à une source de données et que l’événement Validating se produit, le contrôle doit renvoyer ses données actuelles à la source de données.

L’appel ValidateChildren équivaut à appeler ValidateChildren avec un ValidationConstraints de None.

S’applique à

.NET Framework 4.8.1 et autres versions
Produit Versions
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9

ValidateChildren(ValidationConstraints)

Source:
ContainerControl.cs
Source:
ContainerControl.cs
Source:
ContainerControl.cs

Provoque la validation des données de tous les contrôles enfants d’un contrôle qui prennent en charge la validation.

[System.ComponentModel.Browsable(false)]
public virtual bool ValidateChildren (System.Windows.Forms.ValidationConstraints validationConstraints);

Paramètres

validationConstraints
ValidationConstraints

Place des restrictions sur les contrôles dont l’événement Validating est déclenché.

Retours

true si la validation de tous les enfants est réussie ; sinon, false. Si cette méthode est appelée à partir des gestionnaires d’événements Validating ou Validated, elle retourne toujours false.

Attributs

Exemples

L’exemple de code suivant provoque uniquement l’événement Validating pour les enfants immédiats du formulaire dont Enabled la propriété est 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);
        }
    }
}

Remarques

ValidateChildren examine tous les enfants du contrôle actuel, ce qui entraîne la survenue de l’événement Validating sur un contrôle s’il répond aux critères énoncés par ValidationConstraints.

Vous pouvez utiliser plusieurs ValidationConstraints paramètres à la fois en les combinant avec un opérateur OR au niveau du bit. La combinaison de paramètres avec un opérateur OR au niveau du bit entraîne une opération AND logique. Par exemple, l’appel ValidateChildren(ValidationConstraints.ImmediateChildren | ValidationConstraints.Enabled) déclenche uniquement l’événement Validating sur les contrôles qui sont tous deux des enfants immédiats du conteneur ET sont activés.

Quels que soient les paramètres que vous spécifiez pour cette méthode, la propriété d’un contrôle doit être CausesValidation définie true sur pour que son Validating événement se produise. Vous devez également définir la AutoValidate propriété du contrôle ou du conteneur du contrôle sur false si vous souhaitez que la validation se produise uniquement lorsque vous appelez ValidateChildren, et non lorsque l’utilisateur déplace le focus du contrôle.

Si un contrôle est lié à une source de données et que l’événement Validating se produit, le contrôle doit renvoyer ses données actuelles à la source de données.

Vous ne pouvez pas obtenir l’effet inverse d’un ValidationConstraints paramètre en appliquant un opérateur de négation au niveau du bit. Par exemple, si vous fournissez la valeur négative du Visible champ à ValidateChildren, il ne valide pas tous les enfants qui ne sont pas visibles sur le conteneur. La fourniture d’un paramètre négatif à n’aura ValidateChildren aucun effet sur le conteneur ou ses enfants.

S’applique à

.NET Framework 4.8.1 et autres versions
Produit Versions
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9