ContainerControl.ValidateChildren 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
컨트롤 내에서 유효성 검사를 지원하는 모든 자식 컨트롤이 해당 데이터의 유효성을 검사하도록 합니다.
오버로드
ValidateChildren() |
컨트롤 내에서 유효성 검사를 지원하는 모든 자식 컨트롤이 해당 데이터의 유효성을 검사하도록 합니다. |
ValidateChildren(ValidationConstraints) |
컨트롤 내에서 유효성 검사를 지원하는 모든 자식 컨트롤이 해당 데이터의 유효성을 검사하도록 합니다. |
ValidateChildren()
- Source:
- ContainerControl.cs
- Source:
- ContainerControl.cs
- Source:
- ContainerControl.cs
컨트롤 내에서 유효성 검사를 지원하는 모든 자식 컨트롤이 해당 데이터의 유효성을 검사하도록 합니다.
public:
virtual bool ValidateChildren();
[System.ComponentModel.Browsable(false)]
public virtual bool ValidateChildren ();
[<System.ComponentModel.Browsable(false)>]
abstract member ValidateChildren : unit -> bool
override this.ValidateChildren : unit -> bool
Public Overridable Function ValidateChildren () As Boolean
반환
모든 자식의 유효성을 검사했으면 true
이고, 검사하지 못했으면 false
입니다. 이 메서드는 Validating 또는 Validated 이벤트 처리기에서 호출된 경우 항상 false
를 반환합니다.
- 특성
예제
다음 코드 예제는 양식 및 포함된 된 컨트롤의 모든 암시적 유효성 검사가 해제 하 고 마우스 단추를 클릭할 때 대신 유효성 검사의 모든 폼의 자식을 수동으로 수행 합니다.
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 는 컨트롤의 계층 구조를 내려와 각 컨트롤을 검사하여 유효성 검사를 지원하는지 확인합니다. 사용자가 컨트롤을 선택할 수 있고 해당 CausesValidation 속성이 인 true
ValidateChildrenValidating 경우 이벤트가 발생합니다. 컨트롤이 이벤트를 취소 Validating 하는 경우 이 메서드는 를 반환 false
하고, 그렇지 않으면 를 반환 true
합니다.
컨트롤이 데이터 원본에 바인딩되고 Validating 이벤트가 발생하면 컨트롤이 현재 데이터를 데이터 원본으로 다시 푸시합니다.
를 호출 ValidateChildren 하는 것은 의 None를 사용하여 를 호출 ValidateChildren 하는 ValidationConstraints 것과 같습니다.
적용 대상
ValidateChildren(ValidationConstraints)
- Source:
- ContainerControl.cs
- Source:
- ContainerControl.cs
- Source:
- ContainerControl.cs
컨트롤 내에서 유효성 검사를 지원하는 모든 자식 컨트롤이 해당 데이터의 유효성을 검사하도록 합니다.
public:
virtual bool ValidateChildren(System::Windows::Forms::ValidationConstraints validationConstraints);
[System.ComponentModel.Browsable(false)]
public virtual bool ValidateChildren (System.Windows.Forms.ValidationConstraints validationConstraints);
[<System.ComponentModel.Browsable(false)>]
abstract member ValidateChildren : System.Windows.Forms.ValidationConstraints -> bool
override this.ValidateChildren : System.Windows.Forms.ValidationConstraints -> bool
Public Overridable Function ValidateChildren (validationConstraints As ValidationConstraints) As Boolean
매개 변수
- validationConstraints
- ValidationConstraints
Validating 이벤트가 발생한 컨트롤을 제한합니다.
반환
모든 자식의 유효성을 검사했으면 true
이고, 검사하지 못했으면 false
입니다. 이 메서드는 Validating 또는 Validated 이벤트 처리기에서 호출된 경우 항상 false
를 반환합니다.
- 특성
예제
다음 코드 예제에서는 속성이 인 Validating 폼 Enabledtrue
의 직속 자식에 대해서만 이벤트가 발생합니다.
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가 지정된 조건을 충족하는 경우 컨트롤에서 이벤트가 발생합니다.
비트 OR 연산자를 사용하여 여러 ValidationConstraints 매개 변수를 한 번에 사용할 수 있습니다. 비트 OR 연산자를 사용 하 여 매개 변수를 결합 하면 논리적 AND 연산을 줄어듭니다. 예를 들어, 호출 ValidateChildren(ValidationConstraints.ImmediateChildren | ValidationConstraints.Enabled)
만 발생 시킵니다는 Validating 컨테이너의 직계 자식이 고 사용 하는 컨트롤의 이벤트입니다.
이 메서드에 대해 지정하는 매개 변수에 관계없이 이벤트가 발생하려면 컨트롤의 CausesValidationValidating 속성이 로 설정되어 true
있어야 합니다. 또한 사용자가 컨트롤에서 포커스를 이동할 때가 아니라 를 호출ValidateChildren할 때만 유효성 검사가 수행되도록 하려면 컨트롤 또는 컨트롤 컨테이너 false
의 속성을 로 설정 AutoValidate 해야 합니다.
컨트롤이 데이터 원본에 바인딩되고 Validating 이벤트가 발생하면 컨트롤이 현재 데이터를 데이터 원본으로 다시 푸시합니다.
비트 부정 연산자를 ValidationConstraints 적용하여 매개 변수의 반대 효과를 얻을 수 없습니다. 예를 들어 필드ValidateChildren의 음수 Visible 값을 에 제공하는 경우 컨테이너에 표시되지 않는 모든 자식의 유효성을 검사하지는 않습니다. 에 음수 매개 변수를 ValidateChildren 제공해도 컨테이너 또는 해당 자식에는 영향을 주지 않습니다.
적용 대상
.NET