ContainerControl.ValidateChildren Metodo

Definizione

Determina la convalida dei dati di tutti i controlli figlio di un controllo che supporti la convalida.

Overload

ValidateChildren()

Determina la convalida dei dati di tutti i controlli figlio di un controllo che supporti la convalida.

ValidateChildren(ValidationConstraints)

Determina la convalida dei dati di tutti i controlli figlio di un controllo che supporti la convalida.

ValidateChildren()

Origine:
ContainerControl.cs
Origine:
ContainerControl.cs
Origine:
ContainerControl.cs

Determina la convalida dei dati di tutti i controlli figlio di un controllo che supporti la convalida.

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

Restituisce

true se tutti i figli sono stati convalidati. In caso contrario, false. Se chiamato dai gestori eventi Validating o Validated, questo metodo restituirà sempre false.

Attributi

Esempio

L'esempio di codice seguente disattiva la convalida implicita per un modulo e tutti i relativi controlli contenuti e esegue invece manualmente la convalida di tutti gli elementi figlio del modulo quando viene fatto clic su un pulsante del mouse.

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

Commenti

ValidateChildren scenderà la gerarchia di un controllo ed esaminerà ogni controllo per verificare se supporta la convalida. Se il controllo può essere selezionato dall'utente e la relativa CausesValidation proprietà è true, ValidateChildren l'evento Validating verrà generato. Se uno dei controlli annulla l'evento Validating , questo metodo restituirà false; in caso contrario, restituirà true.

Se un controllo è associato a un'origine dati e l'evento Validating si verifica, il controllo eseguirà il push dei dati correnti all'origine dati.

La chiamata ValidateChildren equivale a chiamare ValidateChildren con un ValidationConstraints oggetto .None

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni
.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, 10

ValidateChildren(ValidationConstraints)

Origine:
ContainerControl.cs
Origine:
ContainerControl.cs
Origine:
ContainerControl.cs

Determina la convalida dei dati di tutti i controlli figlio di un controllo che supporti la convalida.

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

Parametri

validationConstraints
ValidationConstraints

Limita i controlli per cui viene generato l'evento Validating.

Restituisce

true se tutti i figli sono stati convalidati. In caso contrario, false. Se chiamato dai gestori eventi Validating o Validated, questo metodo restituirà sempre false.

Attributi

Esempio

Nell'esempio di codice seguente verrà generato solo l'evento Validating per elementi figlio immediati del modulo la cui Enabled proprietà è true.

C#
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);
        }
    }
}

Commenti

ValidateChildren esaminerà tutti gli elementi figlio del controllo corrente, causando che l'evento Validating si verifichi su un controllo se soddisfa i criteri specificati da ValidationConstraints.

È possibile usare diversi ValidationConstraints parametri contemporaneamente combinandoli con un operatore OR bit per bit. La combinazione di parametri con un operatore OR bit per bit comporta un'operazione AND logica. Ad esempio, la chiamata ValidateChildren(ValidationConstraints.ImmediateChildren | ValidationConstraints.Enabled) genererà solo l'evento Validating sui controlli che sono entrambi elementi figlio immediati del contenitore AND sono abilitati.

Indipendentemente dai parametri specificati per questo metodo, è necessario che un controllo disponga della relativa proprietà impostata su true per consentire Validating la verifica CausesValidation dell'evento. È anche necessario impostare la AutoValidate proprietà del controllo o del contenitore false del controllo su se si vuole che la convalida venga eseguita solo quando si chiama ValidateChildrene non quando l'utente sposta lo stato attivo dal controllo.

Se un controllo è associato a un'origine dati e l'evento Validating si verifica, il controllo eseguirà il push dei dati correnti all'origine dati.

Non è possibile ottenere l'effetto opposto di un ValidationConstraints parametro applicando un operatore di negazione bit per bit. Ad esempio, se si specifica il valore negativo del Visible campo a ValidateChildren, non convalida tutti i figli che non sono visibili nel contenitore. La fornitura di qualsiasi parametro negativo per ValidateChildren non avrà alcun effetto sul contenitore o sui relativi elementi figlio.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni
.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, 10