((\(\s*\d{3}\s*\))|(\d{3}))-?\s*\d{3}\s*-\s*\d{4}
((\(\s*\d{3}\s*\))|(\d{3})):區號,允許 (XXX) 或 XXX,數字前後可有空白。-?:可選連字號。\s*\d{3}\s*-\s*\d{4}:交換局碼 3 碼、號碼 4 碼,中間可有空白與連字號。掛接 Control.Validating 事件或覆寫 OnValidating:
private void textBoxName_Validating(object sender, CancelEventArgs e)
{
string error = null;
if (textBoxName.Text.Length == 0)
{
error = "Please enter a name";
e.Cancel = true;
}
this.errorProviderAll.SetError(textBoxName, error);
}
Validate(),避免使用者直接點 OK 跳過驗證。private void buttonOK_Click(object sender, EventArgs e)
{
ValidateAllChildren(this);
}
private void ValidateAllChildren(Control parent)
{
if (this.DialogResult == DialogResult.None) return;
foreach (Control c in parent.Controls)
{
c.Focus();
if (!this.Validate()) { this.DialogResult = DialogResult.None; return; }
ValidateAllChildren(c);
}
}
設計時設定 ErrorProvider.DataSource、DataMember,或執行時呼叫 BindToDataAndErrors。透過 DataRow.RowError、SetColumnError 顯示錯誤圖示。
使用者輸入不可信,.NET 提供完整驗證工具,善用框架功能減少自寫程式碼,全方位驗證所有輸入。