ContainerControl.ValidateChildren メソッド ()
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)

Dim instance As ContainerControl Dim returnValue As Boolean returnValue = instance.ValidateChildren
すべての子の検証が正常に実行された場合は true。それ以外の場合は false。

ValidateChildren は、コントロール階層を下位に向かって調べて行き、各コントロールが検証をサポートしているかどうかを確認します。ユーザーがコントロールを選択できる状態で、その CausesValidation プロパティが true である場合、ValidateChildren は Validating イベントを発生させます。いずれかのコントロールが Validating イベントをキャンセルすると、このメソッドは false を返します。それ以外の場合は true を返します。
コントロールがデータ ソースにバインドされている場合に Validating イベントが発生すると、コントロールの現在のデータがデータ ソースにプッシュされます。
ValidateChildren を呼び出すと、ValidationConstraints に None を指定して ValidateChildren を呼び出した場合と同じ効果が得られます。

フォームおよびそのフォームに格納されているすべてのコントロールに対する暗黙の検証を無効にし、代わりにマウス ボタンがクリックされたときにフォームのすべての子に対して手動で検証を実行するコード例を次に示します。
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() Main(System.Environment.GetCommandLineArgs()) End Sub Private Overloads Shared Sub Main(ByVal args() As String) Application.EnableVisualStyles() 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 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 = 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 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 Sub LastNameBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles LastNameBox.Validating e.Cancel = False End Sub 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
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."); } } } }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ContainerControl.ValidateChildren メソッド (ValidationConstraints)
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)

Public Overridable Function ValidateChildren ( _ validationConstraints As ValidationConstraints _ ) As Boolean
Dim instance As ContainerControl Dim validationConstraints As ValidationConstraints Dim returnValue As Boolean returnValue = instance.ValidateChildren(validationConstraints)
戻り値
すべての子の検証が正常に実行された場合は true。それ以外の場合は false。

ValidateChildren は、現在のコントロールのすべての子を調べ、ValidationConstraints で指定された基準を満たすコントロールで Validating イベントを発生させます。
ValidationConstraints パラメータをビットごとの OR 演算子で組み合わせて複数のパラメータを同時に使用できます。
コントロールの Validating イベントを発生させるためには、このメソッドに指定するパラメータに関係なく、そのコントロールの CausesValidation プロパティが true に設定されている必要があります。また、ValidateChildren を呼び出したときにのみ検証を発生させ、ユーザーがコントロールからフォーカスを移したときには検証を発生させないようにするには、コントロールまたはコントロールのコンテナの AutoValidate プロパティを false に設定する必要があります。
コントロールがデータ ソースにバインドされている場合に Validating イベントが発生すると、コントロールの現在のデータがデータ ソースにプッシュされます。
ValidationConstraints パラメータにビットごとの否定演算子を適用しても、逆の効果を得ることはできません。たとえば、ValidateChildren に負の値の Visible フィールドを指定しても、コンテナ上の表示されていないすべての子が検証されることはありません。ValidateChildren に負のパラメータを指定しても、コンテナやその子に影響はありません。

Enabled プロパティが true であるフォームの直接的な子に Validating イベントのみを発生させるコード例を、次に示します。
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 'Form1_Load Sub SubTextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SubTextBox1.Validating MessageBox.Show("SubTextBox1 Validating!") End Sub 'SubTextBox1_Validating Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating MessageBox.Show("TextBox1 Validating!") End Sub 'TextBox1_Validating Sub TextBox2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating MessageBox.Show("TextBox2 Validating!") End Sub 'TextBox2_Validating Sub TextBox3_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox3.Validating MessageBox.Show("TextBox3 Validating!") End Sub 'TextBox3_Validating Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click Me.ValidateChildren((ValidationConstraints.ImmediateChildren Or ValidationConstraints.Enabled)) End Sub 'Button1_Click End Class 'Form1 End Namespace 'ValidateChildrenWithConstraints
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); } } }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ContainerControl.ValidateChildren メソッド
- ContainerControl.ValidateChildrenのページへのリンク