TextBox

[C#] TextBoxで数値と小数点のみを許可する方法

C#のTextBoxで数値と小数点のみを許可するには、TextBoxのKeyPressイベントを利用して入力を制限する方法があります。

このイベントで、ユーザーがキーを押したときに、そのキーが数値(0-9)または小数点(.)であるかを確認し、それ以外の入力を無効にします。

具体的には、KeyPressEventArgsHandledプロパティをtrueに設定することで、無効なキー入力をキャンセルできます。

また、複数の小数点が入力されないように、TextBoxの現在のテキストに既に小数点が含まれているかをチェックすることも重要です。

これにより、ユーザーが数値と小数点のみを入力できるようになります。

数値と小数点の入力制限

C#のWindowsフォームアプリケーションにおいて、TextBoxに数値と小数点のみを許可する方法について解説します。

これにより、ユーザーが無効な入力を行うことを防ぎ、アプリケーションの信頼性を向上させることができます。

以下に、具体的な実装方法を示します。

数値の入力を許可する方法

数値の入力を許可するためには、TextBoxのKeyPressイベントを利用します。

このイベントを使用して、ユーザーが入力した文字が数値であるかどうかをチェックします。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 数値の入力を許可
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
}

このコードでは、KeyPressイベントが発生した際に、入力された文字が制御文字または数字であるかを確認し、無効な文字が入力された場合はその入力を無視します。

小数点の入力を許可する方法

小数点を許可するためには、数値の入力を許可するロジックに小数点のチェックを追加します。

以下のサンプルコードを参照してください。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 数値と小数点の入力を許可
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
}

このコードでは、小数点.も許可されるように条件を追加しています。

これにより、ユーザーは数値と小数点を入力できるようになります。

複数の小数点を防ぐ方法

小数点が複数回入力されるのを防ぐためには、現在のTextBoxの内容を確認し、すでに小数点が含まれている場合は新たな小数点の入力を無視します。

以下のサンプルコードを見てみましょう。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 数値と小数点の入力を許可
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
        {
            e.Handled = true; // 無効な入力を無視
        }
        // すでに小数点が含まれている場合は新たな小数点を無視
        if (e.KeyChar == '.' && textBox1.Text.Contains("."))
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
}

このコードでは、ユーザーが小数点を入力しようとした際に、すでにTextBoxに小数点が含まれているかを確認し、含まれている場合はその入力を無視します。

これにより、複数の小数点が入力されることを防ぎます。

エラーハンドリングとユーザー通知

ユーザーがTextBoxに無効な入力を行った場合、適切なエラーハンドリングとユーザーへのフィードバックが重要です。

これにより、ユーザーは何が問題であるかを理解し、正しい入力を行うことができます。

以下に、無効な入力の処理方法とユーザーへのフィードバック方法を解説します。

無効な入力の処理

無効な入力を処理するためには、KeyPressイベントだけでなく、Validatingイベントを使用することも有効です。

Validatingイベントは、TextBoxがフォーカスを失う際に発生し、入力内容の検証を行うことができます。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
        textBox1.Validating += new CancelEventHandler(textBox1_Validating);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 数値と小数点の入力を許可
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
        {
            e.Handled = true; // 無効な入力を無視
        }
        // すでに小数点が含まれている場合は新たな小数点を無視
        if (e.KeyChar == '.' && textBox1.Text.Contains("."))
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
    private void textBox1_Validating(object sender, CancelEventArgs e)
    {
        // 入力が無効な場合の処理
        if (!IsValidInput(textBox1.Text))
        {
            MessageBox.Show("無効な入力です。数値と小数点のみを入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            e.Cancel = true; // フォーカスを戻す
        }
    }
    private bool IsValidInput(string input)
    {
        // 入力が数値または小数点であるかを確認
        return double.TryParse(input, out _);
    }
}

このコードでは、Validatingイベントを使用して、TextBoxの内容が数値または小数点であるかを確認しています。

無効な入力があった場合は、エラーメッセージを表示し、フォーカスを戻すことで再入力を促します。

ユーザーへのフィードバック方法

ユーザーへのフィードバックは、エラーメッセージだけでなく、視覚的なヒントを提供することも重要です。

以下に、ユーザーへのフィードバック方法をいくつか示します。

フィードバック方法説明
メッセージボックスエラーメッセージをポップアップ表示する。
テキストボックスの色変更無効な入力時に背景色を赤に変更する。
ツールチップ入力が無効な場合にヒントを表示する。

メッセージボックス

無効な入力があった場合に、メッセージボックスを表示することで、ユーザーにエラーを明確に伝えます。

上記のサンプルコードでも使用しています。

テキストボックスの色変更

無効な入力があった場合、TextBoxの背景色を赤に変更することで、視覚的にエラーを示すことができます。

以下のコードを追加することで実現できます。

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (!IsValidInput(textBox1.Text))
    {
        textBox1.BackColor = Color.Red; // 背景色を赤に変更
        MessageBox.Show("無効な入力です。数値と小数点のみを入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
        e.Cancel = true; // フォーカスを戻す
    }
    else
    {
        textBox1.BackColor = Color.White; // 有効な入力時は背景色を元に戻す
    }
}

ツールチップ

ツールチップを使用して、ユーザーが無効な入力を行った際にヒントを表示することもできます。

以下のように、ToolTipクラスを使用して実装できます。

ToolTip toolTip = new ToolTip();
private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (!IsValidInput(textBox1.Text))
    {
        toolTip.Show("数値と小数点のみを入力してください。", textBox1, 0, -20, 2000); // ツールチップを表示
        e.Cancel = true; // フォーカスを戻す
    }
}

これにより、ユーザーは無効な入力を行った際に、即座にヒントを得ることができます。

応用例

数値と小数点の入力制限をさらに発展させるために、以下の応用例を紹介します。

これにより、ユーザーの入力をより柔軟に制御することができます。

負の数の入力を許可する方法

負の数の入力を許可するためには、KeyPressイベントでの入力チェックにマイナス記号-を追加します。

以下のサンプルコードを参照してください。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 数値、小数点、マイナス記号の入力を許可
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != '-')
        {
            e.Handled = true; // 無効な入力を無視
        }
        // すでに小数点が含まれている場合は新たな小数点を無視
        if (e.KeyChar == '.' && textBox1.Text.Contains("."))
        {
            e.Handled = true; // 無効な入力を無視
        }
        // マイナス記号は先頭にのみ許可
        if (e.KeyChar == '-' && textBox1.Text.Length > 0)
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
}

このコードでは、マイナス記号の入力を許可し、先頭以外にマイナス記号が入力されることを防いでいます。

数値範囲の制限を追加する方法

数値の範囲を制限するためには、Validatingイベントでのチェックを追加します。

以下のサンプルコードでは、入力された数値が特定の範囲内であるかを確認します。

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (!IsValidInput(textBox1.Text))
    {
        MessageBox.Show("無効な入力です。数値と小数点のみを入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
        e.Cancel = true; // フォーカスを戻す
    }
    else
    {
        double value;
        if (double.TryParse(textBox1.Text, out value))
        {
            // 数値範囲の制限
            if (value < 0 || value > 100)
            {
                MessageBox.Show("数値は0から100の範囲で入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                e.Cancel = true; // フォーカスを戻す
            }
        }
    }
}

このコードでは、入力された数値が0から100の範囲内であるかを確認し、範囲外の場合はエラーメッセージを表示します。

カスタムフォーマットの入力を許可する方法

特定のカスタムフォーマット(例えば、通貨形式やパーセント形式)を許可するためには、入力時にフォーマットを適用することができます。

以下のサンプルコードでは、通貨形式の入力を許可する方法を示します。

private void textBox1_Leave(object sender, EventArgs e)
{
    if (double.TryParse(textBox1.Text, out double value))
    {
        // 通貨形式にフォーマット
        textBox1.Text = value.ToString("C"); // Cは通貨形式
    }
}

このコードでは、TextBoxからフォーカスが外れた際に、入力された数値を通貨形式にフォーマットします。

これにより、ユーザーは数値を入力した後に自動的にフォーマットされた表示を確認できます。

これらの応用例を活用することで、ユーザーの入力をより柔軟に制御し、アプリケーションの使いやすさを向上させることができます。

まとめ

この記事では、C#のWindowsフォームにおけるTextBoxで数値と小数点のみを許可する方法について詳しく解説しました。

数値の入力を制限するための基本的な手法から、負の数や特定の範囲の制限、さらにはカスタムフォーマットの適用方法まで、さまざまな応用例を紹介しました。

これらの技術を活用することで、ユーザーが正しい形式でデータを入力できるようにし、アプリケーションの信頼性を高めることが可能です。

ぜひ、実際のプロジェクトにこれらのテクニックを取り入れて、より使いやすいインターフェースを実現してみてください。

関連記事

Back to top button
目次へ