none
MaskedTextBoxのカスタムデータ型の妥当性チェック方法 RRS feed

  • 質問

  • MaskedTextBoxのMaskプロパティを使用して妥当性チェックを行いたいのですが、

    上手くいきません。

    Maskプロパティは年月日時(例:2007/07/02 20)の指定を行いたいと考えています。

    以下のサンプルコードでは、DateTime型へのParseが失敗してしまいます。

    カスタム データ型を定義しなくても出来るでしょうか?

    良い方法が思いつきません。同様な処理を考えている方がおられたら、

    コメントよろしくお願い致します。

     

    <サンプルコード>

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

          Me.MaskedTextBox1.Mask = "0000/00/00 00"

          Me.MaskedTextBox1.ValidatingType = GetType(System.DateTime)
      End Sub


      Private Sub MaskedTextBox1_TypeValidationCompleted(ByVal sender As Object, ByVal e As  System.Windows.Forms.TypeValidationEventArgs) Handles MaskedTextBox1.TypeValidationCompleted
            If Not e.IsValidInput Then
                'エラーメッセージを表示。
            End If
      End Sub

    2007年7月2日 12:22

回答

  • ダッチさん、返信ありがとうございます。

    サンプルコードを参考に動作確認させていただきました。

    確かに実装したいことが実現可能なため、この方法で開発を進めたいと思います。

    ありがとうございました。

     

    2007年7月3日 5:03

すべての返信

  • マスクの設定が「0000/00/00 00」でなければいけないのであれば、TypeValidationCompleted イベントではなく通常の Validating イベントで自前で妥当性チェックすればできると思います。(細かな検証は行っておりません。2007/07/02 20 がチェックできることは確認できました。)


    Code Snippet
    Private Sub MaskedTextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MaskedTextBox1.Validating
        Dim culter As CultureInfo = CultureInfo.CurrentCulture
     
        Dim value As Date
        If Date.TryParseExact(Me.MaskedTextBox1.Text, "yyyy/MM/dd HH", culter, DateTimeStyles.None, value) = False Then
            'エラーメッセージを表示。
        End If
    End Sub

     


    2007年7月2日 13:42
  • ダッチさん、返信ありがとうございます。

    サンプルコードを参考に動作確認させていただきました。

    確かに実装したいことが実現可能なため、この方法で開発を進めたいと思います。

    ありがとうございました。

     

    2007年7月3日 5:03