在 WinForm 內建的控制物件驗證中有兩種驗證方式,隱含驗證和顯式驗證,下面我們就用一個範例來介紹。
我們在新增 2 個 TextBox 和他們各自對應的 2 個 ErrorProvider 用來顯示錯誤訊息,並加上一個 Button 用來模擬送出。
設定錯誤訊息時使用 SetError 方法,驗證通過時再將其設為空字串即可
顯式驗證需要手動觸發,避免給予使用者太多「壓力」,等到使用者慢慢輸入完成後再告訴他哪裡需要調整。
參考資料:
Microsoft.Learn - Overview of how to validate user input (Windows Forms .NET)
測試程式碼
我們在新增 2 個 TextBox 和他們各自對應的 2 個 ErrorProvider 用來顯示錯誤訊息,並加上一個 Button 用來模擬送出。
TextBox userNameTextBox = new();
userNameTextBox.Location = new Point(10, 10);
this.Controls.Add(userNameTextBox);
ErrorProvider userNameErrorProvider = new();
userNameErrorProvider.SetIconAlignment(userNameTextBox, ErrorIconAlignment.MiddleRight);
userNameTextBox.Validating += (sender, e) =>
{
if (userNameTextBox.Text.Length < 5)
{
userNameErrorProvider.SetError(userNameTextBox, "內容需要大於 5 個字元");
e.Cancel = true;
}
else
{
userNameErrorProvider.SetError(userNameTextBox, "");
}
};
TextBox passwordTextBox = new();
passwordTextBox.Location = new Point(10, 60);
passwordTextBox.PasswordChar = '*';
this.Controls.Add(passwordTextBox);
ErrorProvider passwordErrorProvider = new();
passwordErrorProvider.SetIconAlignment(passwordTextBox, ErrorIconAlignment.MiddleRight);
passwordTextBox.Validating += (sender, e) =>
{
if (passwordTextBox.Text.Length < 5)
{
passwordErrorProvider.SetError(passwordTextBox, "內容需要大於 5 個字元");
e.Cancel = true;
}
else
{
passwordErrorProvider.SetError(passwordTextBox, "");
}
};
Button button1 = new();
button1.Location = new Point(passwordTextBox.Right + 20, passwordTextBox.Top);
button1.Text = "送出";
button1.Click += (sender, e) =>
{
if (this.ValidateChildren())
{
MessageBox.Show("送出成功");
}
else
{
MessageBox.Show("資料驗證錯誤");
}
};
this.Controls.Add(button1);
設定錯誤訊息時使用 SetError 方法,驗證通過時再將其設為空字串即可
隱含驗證
目前上面的程式碼就是「隱含驗證」,在焦點變更時自動驗證,如果驗證失敗就會在輸入框的右側顯示提示訊息,可以及時給予使用者回饋。顯式驗證
只要加上下面這行就會抑制自動驗證,變為顯式驗證
this.AutoValidate = AutoValidate.Disable;
顯式驗證需要手動觸發,避免給予使用者太多「壓力」,等到使用者慢慢輸入完成後再告訴他哪裡需要調整。
停止 ErrorProvider 閃爍
驗證錯誤時,ErrorProvider 預設會以 250 毫秒的間格閃爍,若想要停止閃爍,將 BlinkRate 設為 0 即可
userNameErrorProvider.BlinkRate = 0;
參考資料:
Microsoft.Learn - Overview of how to validate user input (Windows Forms .NET)
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com