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イベントは発生しませ。これにより、ほかのコントロールへフォーカスは移動しなくなります。
Please follow and like us:
コメント