C# [WinForms] ErrorProvider 輸入驗證基礎介紹

在 WinForm 內建的控制物件驗證中有兩種驗證方式,隱含驗證和顯式驗證,下面我們就用一個範例來介紹。

測試程式碼


我們在新增 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)

留言