C# WinFormsで数値のみ入力可能なTextBoxを作成する方法

2024-08-21

日本語説明

C#のWinFormsアプリケーションで、数値のみを入力できるTextBoxを作成する方法です。これにより、ユーザーが文字や特殊文字を入力することを防ぎ、数値の入力のみを許可します。

手順

  1. TextBoxコントロールのイベントハンドラーを追加:

    • フォームデザイナーでTextBoxコントロールを配置します。
    • TextBoxコントロールのKeyPressイベントハンドラーを追加します。
  2. KeyPressイベントハンドラーで入力文字を検証:

    • KeyPressイベントハンドラー内で、e.KeyCharプロパティを使用して入力された文字を検証します。
    • e.KeyCharが数値でない場合、e.Handled = trueを設定して入力イベントを処理し、文字を入力させないようにします。

コード例

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 数字またはコントロールキー以外の文字が入力された場合
    if (!char.IsDigit(e.KeyChar) && !e.KeyChar.Equals((char)Keys.Back))
    {
        // 入力イベントを処理し、文字を入力させない
        e.Handled = true;
    }
}

解説

  • char.IsDigit(e.KeyChar): 入力された文字が数字かどうかを判定します。
  • !e.KeyChar.Equals((char)Keys.Back): 入力された文字がBackspaceキーでないかどうかを判定します。Backspaceキーは数値入力に必要なので、許可します。
  • e.Handled = true: 入力イベントを処理し、文字を入力させないようにします。
  • この方法は、数値の入力のみを許可する基本的な方法です。より複雑な入力制限が必要な場合は、正規表現やカスタムバリデーションを使用することもできます。
  • 他のコントロール(例えば、NumericUpDown)を使用することもできますが、TextBoxを使用することでより柔軟なカスタマイズが可能になります。



C#で数値のみ入力可能なTextBoxを作成するコード例

以下のコードは、C#のWinFormsアプリケーションで数値のみを入力可能なTextBoxを作成する方法を示しています。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 数字またはコントロールキー以外の文字が入力された場合
    if (!char.IsDigit(e.KeyChar) && !e.KeyChar.Equals((char)Keys.Back))
    {
        // 入力イベントを処理し、文字を入力させない
        e.Handled = true;
    }
}

コード解説

  1. textBox1_KeyPressイベントハンドラー:

    • このイベントハンドラーは、TextBoxコントロールのKeyPressイベントが発生したときに呼び出されます。
    • e.KeyCharプロパティは、入力された文字を表します。
  2. 数値またはコントロールキー以外の文字が入力された場合:

  3. 入力イベントを処理し、文字を入力させない:




  • MaskedTextBoxコントロールは、特定のフォーマットで入力を受け付けるTextBoxです。
  • 数値のみを入力させる場合は、マスクを数値のフォーマット(例えば、"99999")に設定します。
maskedTextBox1.Mask = "99999";

正規表現を使用

  • 正規表現を使用して、数値のみの入力パターンを定義します。
  • TextBoxのTextChangedイベントハンドラーで正規表現を使用して入力値を検証し、不正な文字が入力された場合はエラーメッセージを表示したり、入力値を修正したりします。
private void textBox1_TextChanged(object sender, EventArgs e)
{
    Regex regex = new Regex(@"^\d+$");
    if (!regex.IsMatch(textBox1.Text))
    {
        // エラー処理
        MessageBox.Show("数値のみ入力してください。");
        textBox1.Text = "";
    }
}

カスタムバリデーション

  • カスタムバリデーションを作成して、入力値を検証します。
  • Validatingイベントハンドラーでカスタムバリデーションを実行し、不正な入力があった場合はエラーメッセージを表示したり、入力値を修正したりします。
private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (!IsNumeric(textBox1.Text))
    {
        // エラー処理
        MessageBox.Show("数値のみ入力してください。");
        e.Cancel = true;
    }
}

private bool IsNumeric(string text)
{
    double number;
    return double.TryParse(text, out number);
}
  • これらの方法は、それぞれ異なる利点と欠点があります。
  • MaskedTextBoxは、簡単な数値入力制限に適しています。
  • 正規表現は、より複雑な入力制限が必要な場合に使用できます。
  • カスタムバリデーションは、独自の検証ロジックを実装したい場合に使用できます。

選択基準

  • 必要な入力制限の複雑さに基づいて方法を選択してください。
  • ユーザビリティと開発効率も考慮してください。
  • 適切な方法を選択することで、より使いやすいアプリケーションを作成することができます。

c# .net winforms



C#におけるDataTableに対するLINQクエリ代替方法

**LINQ (Language-Integrated Query)**は、.NET Frameworkで提供されるクエリ構文です。これにより、オブジェクトのコレクションを宣言的に操作することができます。DataTableは、データベーステーブルの構造とデータを表現するオブジェクトであり、LINQを使ってクエリを実行することができます。...


C#における基底コンストラクタ呼び出しの具体的なコード例と解説

**C#**において、クラスが別のクラスから継承している場合、そのクラスのコンストラクタは基底クラスのコンストラクタを呼び出す必要があります。これは、基底クラスの初期化が子クラスの初期化の前提となるためです。base()キーワードを使用:public class DerivedClass : BaseClass { public DerivedClass() : base() { // Derived class's constructor body } } この場合、DerivedClassのコンストラクタはBaseClassのデフォルトコンストラクタを呼び出します。...


.NETにおけるstructとclassの違いを日本語で解説(例付き)

structとclassは、.NETフレームワークにおける2つの基本的なデータ型です。どちらもオブジェクト指向プログラミングの概念に基づいていますが、いくつかの重要な違いがあります。両者はメンバー(フィールドやメソッド)を持つことができます。...


C# で Gmail を使ってメールを送信する

System. Net. Mail: メール送信の基本的な機能を提供します。Google. Apis. Gmail. v1: GoogleのGmail APIと連携するためのライブラリです。Gmail APIの有効化:Google Cloud Platformのコンソールでプロジェクトを作成します。APIライブラリで「Gmail API」を有効化します。APIキーを作成し、安全に保管します。...


C#におけるアセンブリのパスを取得するコード例

**C#**において、実行中のコードが属するアセンブリのパスを取得するには、リフレクションを利用します。リフレクションは、実行時にプログラムのメタデータにアクセスするための機能を提供します。Assembly クラスを使用する:Assembly...



c# .net winforms

C#でDateTime型の誕生日から年齢を計算するコードの解説

日本語:C#でDateTime型の誕生日から年齢を計算するには、以下の手順に従います。誕生日を取得する: DateTime型の変数に誕生日の日付を設定します。現在の時刻を取得する: DateTime. Nowを使用して現在の時刻を取得します。


C#で辞書を値でソートするコード例

**C#**において、辞書(Dictionary)の要素を値でソートするには、通常以下の手順を踏みます。値とキーのペアを格納する新しいリストを作成する。元の辞書の各要素を新しいリストに追加する。新しいリストを値でソートする。ソートされたリストからキーと値を抽出する。


C#におけるTypeから新しいオブジェクトインスタンスを作成する際の性能比較:コード例と解説

日本語訳:C#において、Typeオブジェクトから新しいオブジェクトインスタンスを作成する方法は、パフォーマンスに影響を与えます。この解説では、さまざまな方法とその性能について説明します。Activator. CreateInstanceメソッド:


C#におけるStringとstringの代替方法

**C#**では、Stringとstringという2つのキーワードがありますが、実はどちらも同じものを指しています。つまり、C#ではstringがエイリアスとして定義されており、Stringとまったく同じ意味を持っています。これは、C#の設計上の選択であり、開発者がどちらのキーワードを使っても同じコードが生成されるようになっています。


Entity Framework vs LINQ to SQL: .NET プログラミングにおける比較

Entity Framework と LINQ to SQL は、.NET プログラミングにおいてデータベースとアプリケーションを接続するためのオブジェクト関係マッピング (ORM) ツールです。どちらも、データベースのデータをオブジェクトとして扱うことができるため、開発の効率性を向上させることができます。