C#にはErrorProviderというコントロールの横にエラーを出力するための機能があります。
私も最近知ったのですがこのErrorProviderを使用すれば、
コントロールにバリデーションを実装できます。
例えば、半角英数字のみ入力可能なテキストボックスを追加したいとき、
それ以外の文字が入力されるとエラー表示されフォーカスを次に移すことができないようにできます。
具体的には、以下の赤ビックリマークとエラー文字列を表示することが可能です。
開発環境
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文に追加すれば、いろんなパターンのバリデーションを作成することが可能です。