テキストボックスに入力された数値が正しいかチェックするサンプルです。
サンプルとして、isNumberメソッド、isNumberFromToメソッドを作成しました。
isNumberメソッドは数値チェックを行いエラーがあればErrorProviderに警告を通知します。
isNumberFromToメソッドは開始と終了の大小関係をチェックします。
こちらもエラーがあればErrorProviderに警告を通知します。
入力チェックの内容
数値チェック
・必須チェック
必須指定の場合、未入力なら警告を通知します。
・数値チェック
数値に変換できない場合、警告を通知します。
数値チェック(isNumber)の引数
No | 型 | 引数 | 内容 |
1 | ErrorProvider | ErrorProvider | 警告時に通知するErrorProvider |
2 | string | 項目名 | 警告時に表示する項目名 |
3 | TextBox | テキストボックス | チェック対象のテキストボックス |
4 | bool | 必須区分 | true:必須 false:必須でない |
5 | int | 少数以下桁数 | 許す小数点以下の桁数 |
6 | double | 最小値 | 許す最小値 |
7 | double | 最大値 | 許す最大値 |
数値大小関係チェック
・数値大小関係チェック
終了値が開始値より小さいなら警告を通知します。
数値大小関係チェック(isNumberFromTo)の引数
No | 型 | 引数 | 内容 |
1 | ErrorProvider | ErrorProvider | 警告時に通知するErrorProvider |
2 | string | 開始値の項目名 | 警告時に表示する項目名 |
3 | string | 終了値の項目名 | 警告時に表示する項目名 |
4 | TextBox | 開始値 | チェック対象のテキストボックス |
5 | TextBox | 終了値 | チェック対象のテキストボックス |
サンプルの内容
①~③のチェックを行い、エラーがあれば警告の通知をメソッド内で行います。
正常であればtrue、エラーならfalseを返します。
① 必須チェックをする
IsNullOrEmptyを使用してnullか空の文字列かを判定しています。
② 数値チェック
TryParseを使用して数値に変換できるか判定しています。
③ 範囲チェック
引数の最小値~最大値の範囲内か判定しています。
④ 小数点以下の桁数チェック
引数の少数以下桁数と「.」から右の文字数で判定しています。
⑤ 数値大小関係チェック
開始値と終了値をdoubleに変換し大小判定しています。
開始値と終了値の何れかが、nullか空文字の場合はチェックを行わずtrueを返します。
また、開始値と終了値の値にエラーがないことを判定してから呼び出しています。
使用部品
No | 項目名 | Text | name | 部品 |
1 | コイン所有枚数(見出し) | コイン所有枚数 | label1 | Label |
2 | コイン所有枚数(入力欄) | 空 | txtNumber | TextBox |
3 | コイン購入予定数(見出し) | 有効期間 | label2 | Label |
4 | コイン購入予定数・開始(入力欄) | 空 | txtNumberFrom | TextBox |
5 | コイン購入予定数・終了(入力欄) | 空 | txtNumberTo | TextBox |
6 | チェックボタン | チェック | button1 | Button |
プログラミング
言語:C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp20
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// ErrorProviderのインスタンス生成
ErrorProvider ep = new ErrorProvider();
// 画面起動時処理
private void Form1_Load(object sender, EventArgs e)
{
// ErrorProviderのアイコンを点滅なしに設定する
ep.BlinkStyle = ErrorBlinkStyle.NeverBlink;
}
/// <summary>
/// チェックボタンクリック処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// エラーフラグ
bool errFlg = false;
// ErrorProviderをクリアします。
ep.Clear();
// コイン所有枚数の数値チェック
if (!isNumber(ep, "コイン所有枚数", txtNumber, true, 0, 0, 100)) {
errFlg = true;
}
// コイン購入予定数(開始)の数値チェック
if (!isNumber(ep, "コイン購入予定数(開始)", txtNumberFrom, false, 2, 0, 100.99))
{
errFlg = true;
}
// コイン購入予定数(終了)の数値チェック
if (!isNumber(ep, "コイン購入予定数(終了)", txtNumberTo, false, 2, 0, 100.99))
{
errFlg = true;
}
// コイン購入予定数の大小関係チェック
if (!errFlg)
{
isNumberFromTo(ep, "コイン購入予定数(開始)", "コイン購入予定数(終了)",
txtNumberFrom, txtNumberTo);
}
}
/// <summary>
/// 数値チェック
/// </summary>
/// <param name="ep">ErrorProvider</param>
/// <param name="itemName">項目名</param>
/// <param name="c">TextBox</param>
/// <param name="required">必須区分(true:必須 false:必須でない)</param>
/// <param name="pointNum">少数以下桁数</param>
/// <param name="minValue">最小値</param>
/// <param name="maxValue">最大値</param>
/// <returns>結果</returns>
static bool isNumber(ErrorProvider ep, string itemName, TextBox c, bool required,
int pointNum,double minValue, double maxValue)
{
string msg = "";
// nullか空の文字列か判定する
if (String.IsNullOrEmpty(c.Text))
{
// 必須チェックを行うか判定する
if (required)
{
// 未入力の警告を通知する。
msg = $"{itemName} は、必須項目です。";
ep.SetError(c, msg);
// CHECK NG
return false;
}
else
{
// CHECK OK
return true;
}
}
// 数値チェック
double d;
if (!double.TryParse(c.Text, out d))
{
// 数値でない警告を通知する
msg = $"{itemName} は、数値ではありません。";
ep.SetError(c, msg);
// CHECK NG
return false;
}
// 範囲チェック
if (d < minValue || d > maxValue) {
// 範囲外の警告を通知する
msg = $"{itemName} は、{minValue} ~ {maxValue} の範囲内で入力して下さい。";
ep.SetError(c, msg);
// CHECK NG
return false;
}
// ピリオドの位置を取得する
int period = d.ToString().IndexOf(".");
if (period == -1)
{
// CHECK OK (ピリオドなし)
return true;
}
// 小数点以下の桁数チェック
int digit = d.ToString().Substring(period+1).Length;
if (pointNum < digit)
{
if ( pointNum == 0)
{
msg = $"{itemName} は、整数で入力して下さい。";
}
else
{
msg = $"{itemName} は、小数点以下の桁数を{pointNum}桁で入力して下さい。";
}
ep.SetError(c, msg);
// CHECK NG
return false;
}
// CHECK OK
return true;
}
/// <summary>
/// 大小関係チェック
/// </summary>
/// <param name="ep">ErrorProvider</param>
/// <param name="itemName1">開始値の項目名</param>
/// <param name="itemName2">終了値の項目名</param>
/// <param name="c1">開始値</param>
/// <param name="c2">終了値</param>
/// <returns>結果</returns>
static bool isNumberFromTo(ErrorProvider ep, string itemName1, string itemName2,
TextBox c1, TextBox c2)
{
string msg = "";
// 開始値と終了値のどちらかが、null又は空文字か判定する
if (String.IsNullOrEmpty(c1.Text) || String.IsNullOrEmpty(c2.Text))
{
// CHECK OK
return true;
}
// 数値に変換する
double d1 = double.Parse(c1.Text);
double d2 = double.Parse(c2.Text);
// 終了日が開始日より前か判定する
if (d2 < d1)
{
// 終了値が開始値より前の警告を通知する
msg = $"{itemName2} が、{itemName1} より小さい値です。";
// 終了日の警告をセット
ep.SetError(c2, msg);
// CHECK NG
return false;
}
// CHECK OK
return true;
}
}
}
実行結果
コイン所有枚数:必須チェックの警告が通知されます。
コイン所有枚数:数値でない警告が通知されます。
コイン所有枚数:日付でない警告が通知されます。
コイン購入予定:終了値が開始値より小さい警告が通知されます。
コイン所有枚数:範囲外の警告が通知されます。
コイン購入予定:小数点以下の桁数超えの警告が通知されます。
開始値と終了値のどちらかが未入力の場合には大小関係チェックは行いませんので、警告は通知されません。
以上です。