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:


コメント