none
TextBoxに整数と小数点のみを認識させるには RRS feed

  • 質問

  • Visual Basic 2010において、

    TextBox1に入力された数値が整数と小数点以外の時、TextBox1に"エラー"と表示させるにはどのようにすれば良いでしょうか?

    例えば0.04と入力する所を00.4や-3の所を3-と入力してしまった場合を想定しています

    よろしくお願いします。

    2014年10月5日 8:06

回答

  • そういうやり方ではなくて、先に紹介したようにイベントドリブン検証を使うことをお勧めします。以下のページが参考になりませんか?

    Control.Validating イベント
    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.validating(v=vs.110).aspx

    上記ページのサンプルコードで、ValidEmailAddress メソッドを、質問者さんが書いたコードのように TryParse メソッドを使ってユーザー入力が Double 型として適切かチェックできるように修正すれば良いはずです。

    > 「10」整数を入力した場合には「小数点です。」となりました。

    その場合はどういう結果になればいいのですか? 10 は Double 型にパースできるので TryParse の結果が true になってしかるべきです。よく考えてみてください。

    PS.

    最初の質問にあった「TextBox1に"エラー"と表示させる」という要件は変わってないのですよね? であれば、上に紹介したページのサンプルのようにするべきです。

    • 編集済み SurferOnWww 2014年10月5日 11:57 誤字訂正&PS追加
    • 回答としてマーク mk1223 2014年10月5日 12:05
    2014年10月5日 11:47

すべての返信

  • 質問の最初に、ご自分の環境(OS, .NET Framework などのバージョン)、何を作っているか(Windows Forms アプリ? ASP.NET Web アプリ? その他?)を書くようにしていただけませんか? 前のスレッドを見れば分かるだろうとは言わないでくださいね。

    ユーザー入力の検証を行いたいのですよね? できればどういう場面で検証を行うのか、簡単にシナリオ的なことを書いていただけると、回答者の方も的を得た回答がしやすいと思います。


    【追記】

    誤字訂正のついでに、ググって参考になりそうなページを調べたので URL を貼っておきます。これが求めていた情報と異なる場合は、具体的にどう違うのか書いてください。

    Windows フォームでのユーザー入力の検証
    http://msdn.microsoft.com/ja-jp/library/ms229603(v=vs.110).aspx

    他にも「windows forms」「ユーザー入力」「検証」などをキーワードにググると参考になるページが多々見つかると思います。

    • 編集済み SurferOnWww 2014年10月5日 8:34 誤字訂正&追記
    2014年10月5日 8:18
  • >SurferOnWwwさん

    失礼しました。

    OS:Windows Vista、.NET Framework:4

    Windows Forms アプリで簡単な数値計算を行うために作成しています。

    プログラミングに関して全くの初心者ですので、素人的な発言であると思います。

    不十分な回答でしたらご指摘ください。

    追記のアドバイス、ありがとうございます。
    • 編集済み mk1223 2014年10月5日 8:37
    2014年10月5日 8:35
  • 上で追記したのが行き違いになってしまったようです。同じことですがもう一度書きますね。

    ググって参考になりそうなページを調べたので URL を貼っておきます。これが求めていた情報と異なる場合は、具体的にどう違うのか書いてください。

    Windows フォームでのユーザー入力の検証
    http://msdn.microsoft.com/ja-jp/library/ms229603(v=vs.110).aspx

    他にも「windows forms」「ユーザー入力」「検証」などをキーワードにググると参考になるページが多々見つかると思います。

    2014年10月5日 8:39
  • 教えて頂いたページをチェックしました。

    MaskedTextBox検証については、今回TextBoxを使用しており、ドリブン検証については概要については理解でき、応用できるかと思いましたが、未だ解決には至っておりません。

    単純に検証したい数値がInteger型かDouble型でなければ、エラー表示になるようにしたく、

    If TextBox1.Text = Integer型 or Double型 then

        MsgBox("エラー")

    End If

    のコードをイメージしています。 下線部をどのように書くかを悩んでいます。

    他の検索ワードでも探してみましたが満足できるページにはたどり着きませんでした。

    2014年10月5日 9:38
  • そういう形にはできません。
    なぜなら、TextBox1.Text は String 型と決定しており、それと等価かどうかの判定式では実現する方法が存在しないからです。

    さて、解決に向けての話ですが、DOBON.NET さんが公開されている、以下の記事をまず読んでみませんか?
    http://dobon.net/vb/dotnet/vb2cs/isnumeric.html

    2014年10月5日 10:13
    モデレータ
  • >Azuleanさん

    アドバイスありがとうございます。

    Doble.TryParseメソッドを用いようと思います。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Dim str As String = TextBox1.Text
    
            Dim d As Double
            If Double.TryParse(str, d) Then
                TextBox1.Text = d
                Label1.Text = ("小数点です")
            Else
                Label1.Text = ("小数点ではありません。")
            End If
    
        End Sub

    Console.WriteLineの使い方がイマイチ分からなかったので変えてみました。

    しかし、例えば、「0.3.4」と入力した場合には「小数点ではありません。」となりましたが、

    「10」整数を入力した場合には「小数点です。」となりました。

    どこを修正すればよいのかご教授願います。



    2014年10月5日 11:34
  • そういうやり方ではなくて、先に紹介したようにイベントドリブン検証を使うことをお勧めします。以下のページが参考になりませんか?

    Control.Validating イベント
    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.validating(v=vs.110).aspx

    上記ページのサンプルコードで、ValidEmailAddress メソッドを、質問者さんが書いたコードのように TryParse メソッドを使ってユーザー入力が Double 型として適切かチェックできるように修正すれば良いはずです。

    > 「10」整数を入力した場合には「小数点です。」となりました。

    その場合はどういう結果になればいいのですか? 10 は Double 型にパースできるので TryParse の結果が true になってしかるべきです。よく考えてみてください。

    PS.

    最初の質問にあった「TextBox1に"エラー"と表示させる」という要件は変わってないのですよね? であれば、上に紹介したページのサンプルのようにするべきです。

    • 編集済み SurferOnWww 2014年10月5日 11:57 誤字訂正&PS追加
    • 回答としてマーク mk1223 2014年10月5日 12:05
    2014年10月5日 11:47
  • すでに指摘のあるとおり、10 も 10.0 も .NET においては同じ意味を示す数値です。
    これらを分けて扱う必要があるのであれば、入力された文字列が正しいか、文字列として検証する必要があります。

    (分野として、10 と 10.0、10.00 は違う意味だと解するところもあると思いますが、.NET や VB.NET においてはそういう解釈はないということです)

    2014年10月5日 11:55
    モデレータ
  • 皆さんご指摘ありがとうございます。

    10と10.0が同じ意味を示す。言われてみればそうですね。少し考えが足りませんでした。

    当初の目的である、「整数と小数点以外をエラー表示」を、Double.TryParseメソッドで無事解決出来ました。

    今後、中身のある質問をできるようにしっかり勉強します。

    ありがとうございました

    2014年10月5日 12:04
  • > 10と10.0が同じ意味を示す。言われてみればそうですね。

    細かいことを言えば、Int32 型の 10 と Double 型の 10 は違います。

    Double 型は浮動小数点型なので近似値でしか表すことができません。詳しくは「浮動小数点」「誤差」などをキーワードにググって見てください。

    ただ、数値計算を行うそうですが、それを Double 型で行うのであれば、ユーザー入力の文字列を Double 型にパースして問題ないはずです。

    2014年10月5日 12:15
  • すでに指摘のあるとおり、10 も 10.0 も .NET においては同じ意味を示す数値です。
    これらを分けて扱う必要があるのであれば、入力された文字列が正しいか、文字列として検証する必要があります。

    参考までにです。doubleには残念ながらTryParseExactメソッドが無いのですが、以下のようにして等価のメソッドを実現することができます。

    How Can I Parse a Number Equivalent to DateTime.TryParseExact?
    http://stackoverflow.com/questions/3604327/how-can-i-parse-a-number-equivalent-to-datetime-tryparseexact


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年10月5日 15:30
    モデレータ