[Tips] Validatingイベントを使用する その1 ~ 基本的な使い方 ~

Windows Formアプリケーションで入力チェックを行うには Validatingイベントを使用します。

例として、以下のような画面で考えてみます。

画面デザイン

データ1(テキストボックス)に不正な値が含まれている場合に、ほかのコントロールにフォーカスを移動できないようにするには

1.データ1のValidatingイベント内で入力チェックをする
2.不正な値が含まれている場合は、Validatingイベントの引数 e.Cancelに trueをセット

を実施します。
CauseVaidatingプロパティに false がセットされている場合は Validatingイベントは発生しないので注意が必要です。

データ1のTextBoxで「.」を不正文字として扱う時のコード例は以下の通りです。

VBの例

Private Sub txtData1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles txtData1.Validating
    ' 不正な文字「.」が含まれているか?
    If txtData1.Text.IndexOf(".") > -1 Then
        MessageBox.Show("不正な文字「.」が含まれています")

        ' 後続のイベントをキャンセル
        e.Cancel = True
    End If
End Sub

'[キャンセル]ボタンのイベント
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
    Me.Close()
End Sub

C#の例

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    // 不正な文字「.」が含まれているか?
    if (txtData1.Text.IndexOf('.') > -1 && this.ActiveControl != txtData1)
    {                
        MessageBox.Show("不正な文字「.」が含まれています");

        // 後続のイベントをキャンセル
        e.Cancel = true;
    }
}

// [キャンセル]ボタンのイベント
private void btnCancel_Click(object sender, EventArgs e)
{
    this.Close();
}

TextBoxコントロールのインベントは、ほかのコントロールへフォーカスが移動するとき以下の順でイベントが発生します。
コード例の中のコメントでも書いていますが、e.Cancel = true は後続のイベントをキャンセルします。

Leave → Validating → Validated

よって Validatedイベントは発生しませ。これにより、ほかのコントロールへフォーカスは移動しなくなります。


[Tips] App.config内の Value値で改行をしたい

C#で使用する外部設定ファイル内の Value値で改行をしたくて、以下のように \r\n を挿入してみましたがうまくいきませんでした。

<add key="M0001" value="hoge \r\n fuga"/>


解決策

改行をしたい場所に &#13;&#10; を挿入。

<add key="M0001" value="hoge &#13;&#10; fuga"/>

よく考えてみたらあたりまえのことですね…

[Tips] 設定ファイルを追加する

新規でプロジェクトを作成したときに、Settings.settingというファイルが追加されますが、新たに設定ファイルを追加することができます。

例えば、ErrorMessage.settingという名前の設定ファイルを追加して、独自のエラーメッセージを管理するといった具合に使い分けることが可能です。

プロジェクトファイルの[追加]-[新しい項目]-[全般]の中から「設定ファイル」を選択し、任意のファイル名をつけます。

VBの場合

設定ファイルの追加

C#の例

設定ファイルの追加


■追加した設定ファイルを使うには

追加した設定ファイルの使用方法は、すでに存在するSettings.settingと同様です。

新規に追加した設定ファイルがプロジェクト直下である場合は、以下のようにしてアクセすることができます。

VBの場合

プロジェクトの名前空間.新規で追加した設定ファイル名.Default.プロパティ名

C#の場合

プロジェクトの名前空間.新規で追加した設定ファイル名.Default.プロパティ名