ボス級社内SEのお役立ち技術情報

社内SEのシステム開発について。メインプログラム言語C#

【VisualStudio2017 C#】ErrorProviderを使用してバリデーションをコントロールに実装する

f:id:HLSE:20190116105121j:plain

C#にはErrorProviderというコントロールの横にエラーを出力するための機能があります。

私も最近知ったのですがこのErrorProviderを使用すれば、

コントロールにバリデーションを実装できます。

 

例えば、半角英数字のみ入力可能なテキストボックスを追加したいとき、

それ以外の文字が入力されるとエラー表示されフォーカスを次に移すことができないようにできます。

 

具体的には、以下の赤ビックリマークとエラー文字列を表示することが可能です。

f:id:HLSE:20190219205350j:plain

 

開発環境

OS:Windows10 64bit
開発環境:VisualStudio2017
プログラム言語:C#

 

コード

コントロールに配置したTextBox1のValidatedイベントとValidatingイベントを使用します。

 

Validatedイベントは、エラーを初期化するメソッドを実装し、

Validatingイベントにバリデーションを行うメソッドを実装します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void textBox1_Validated(object sender, EventArgs e)
        {
            OriginalValidated((Control)sender);
        }
        private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            OriginalValidate((Control)sender, e, StringType.HALF_NUMBER);
        }
 
        ErrorProvider errorProvider = new ErrorProvider();
        public enum StringType
        {
            HALF_NUMBER,
            HALF_NUMBER_DOT
        }
        private void OriginalValidate(Control sender, CancelEventArgs e, StringType stringType)         {             string regexString = "";             string errorString = "";             switch (stringType)             {                 case StringType.HALF_NUMBER:                     regexString = @"^[0-9]*$";                     errorString = "半角数字";                     break;                 case StringType.HALF_NUMBER_DOT:                     regexString = @"^\d*\.*\d*$";                     errorString = "半角数字(小数点以下含む)";                     break;             }             Regex regex = new Regex(regexString);             if (!regex.IsMatch(((Control)sender).Text))             {                 errorProvider.SetError((Control)sender, errorString);                 e.Cancel = true;             }         }         private void OriginalValidated(Control control)         {             errorProvider.SetError(control, null);         }     } }

 

StringType列挙体とswitch文に追加すれば、いろんなパターンのバリデーションを作成することが可能です。