入力する文字型の制限の仕方

解決


wish  2003-12-21 11:29:03  No: 110853

Textボックス等にユーザが入力する文字型の制限をしたいと思っています。
今は半角数字だけにしたいのですが、IMEModeで制限してもコピペなどには意味がなく、
やはり逐一if文等で確認するしかないのでしょうか?


いな  2003-12-21 22:56:06  No: 110854

まぁ、VB5なのか6なのか?
はたまた.NETなのか環境が書いていないので、
書いてくださいね

数値かどうかはvalidateイベント、もしくはChangeイベント内で、
If IsNumeric(Text1.Text) = True Then
とか、もしくは正規表現で
If (Text1.Text Like "*[!0-9]*") = False Then・・・。
とか
半角も同様にチェックすればOKかと


wish  2003-12-22 06:54:24  No: 110855

入力された文字を半角数字であるか確認する場合に

If IsNumeric(Text.Text) Then
ではエラーは出ないのですが、

If IsNumeric(Text.Text) And Text.Text >= 0 And Text.Text <= 100 Then
と0〜100であるかどうかの条件も加えたらエラーが出てしまいます。
二重のif文にすべきなのでしょうか?

開発環境はVB 6.0です。


いな  2003-12-22 08:40:49  No: 110856

数値以外を入れたときに型の不一致エラーとなるのでしょう。
二重のif文にしたほうがスマートですね。

Dim chk_flg as boolean
chk_flg = False

If IsNumeric(Text.Text) Then
   IfCint(Text.Text) >= 0 And Cint(Text.Text) <= 100 Then
       chk_flg = True
   End if
End if

こうゆうやり方もありますが(Text1とText2をFormに張り付けて実行)
--
On Error GoTo Text1_Change_Err
    If Trim(Text1.Text) <> "" Then
        If IsNumeric(Text1.Text) And Text1.Text >= 0 And Text1.Text <= 100 Then
            Text2.Text = "True"
        Else
            Text2.Text = "False"
        End If
    End If
    
Text1_Change_Err:
    If Err.Number = 13 Then
        Text2.Text = "False"
    End If


wish  2003-12-22 11:08:39  No: 110857

ありがとうございます。

もう一つ質問なのですが、

======================
Dim A As Integer
Dim B As Integer
Dim C As Integer

A = TextA.Text
B = TextB.Text
======================

というプログラムがあったとします。
TextA.TextとTextB.Textにはユーザが半角数字を入力します。

TextA.Textには10が、TextB.Textには20が入力され、トリガとなるボタンが押されたとします。

この場合に
C = A + B
TextC.Text = C
とするとTextC.Textには30が入るはずなのに1020が入ってしまいます。
恐らく文字列として扱われ、結合されたと思うのですが、
C = A - -Bとすると
ちゃんとCには30が入ります。

( C = A + B と C = A - -B は数式的に同じですよね?)

どうしてなのでしょうか?


mady  2003-12-22 17:07:47  No: 110858

型変換が伴う場合には、自動キャストに頼らず明示的に
型変換したほうがいいです。

「→文字列」:Cstr
「→整数」:Cint
など。

また、異なる質問をするときには別の板を立てたほうがいいです。


tokkoutaityoumaruruu  2003-12-22 18:18:58  No: 110859

理由としては

Dim A As String
Dim B As String

A = TextA.Text
B = TextB.Text

TextA.Text = A + B

が成り立っちゃうからだろうと思います。A + B は文字列の
演算としても有効です。-B は有効でないので自動キャスト
を試みるのではないでしょうか。この辺りを曖昧にするクセを
つけてしまうと後々とんでもないバグを生む事になりかねません。
mady さんのおっしゃる通り明示的な型変換を心がけて下さい。


特攻隊長まるるう  2003-12-22 18:20:32  No: 110860

↑恥ずかしい失敗をしてしまた…(  _)_ぺたり


wish  2003-12-24 01:08:56  No: 110861

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

ふと思ったのですが、TextBoxのIMEModeを8(半角英数)にしたら半角英数しか入力できない状態にはなるのですが、
変換できる状態(点々の下線のある状態)になりますよね?
それをなくしたい場合はどうすればいいのでしょうか?


魔界の仮面弁士  2003-12-24 02:13:28  No: 110862

> それをなくしたい場合はどうすればいいのでしょうか?
『半角英数入力モード』にするのではなく、IMEをオフにしておくか、
もしくは、IMEを使えない状態にしておけば良いと思いますよ。


wish  2003-12-24 04:07:38  No: 110863

>魔界の仮面弁士

オフにすればできました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加