Textボックス等にユーザが入力する文字型の制限をしたいと思っています。
今は半角数字だけにしたいのですが、IMEModeで制限してもコピペなどには意味がなく、
やはり逐一if文等で確認するしかないのでしょうか?
まぁ、VB5なのか6なのか?
はたまた.NETなのか環境が書いていないので、
書いてくださいね
数値かどうかはvalidateイベント、もしくはChangeイベント内で、
If IsNumeric(Text1.Text) = True Then
とか、もしくは正規表現で
If (Text1.Text Like "*[!0-9]*") = False Then・・・。
とか
半角も同様にチェックすればOKかと
入力された文字を半角数字であるか確認する場合に
If IsNumeric(Text.Text) Then
ではエラーは出ないのですが、
If IsNumeric(Text.Text) And Text.Text >= 0 And Text.Text <= 100 Then
と0〜100であるかどうかの条件も加えたらエラーが出てしまいます。
二重のif文にすべきなのでしょうか?
開発環境はVB 6.0です。
数値以外を入れたときに型の不一致エラーとなるのでしょう。
二重の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
ありがとうございます。
もう一つ質問なのですが、
======================
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 は数式的に同じですよね?)
どうしてなのでしょうか?
型変換が伴う場合には、自動キャストに頼らず明示的に
型変換したほうがいいです。
「→文字列」:Cstr
「→整数」:Cint
など。
また、異なる質問をするときには別の板を立てたほうがいいです。
理由としては
Dim A As String
Dim B As String
A = TextA.Text
B = TextB.Text
TextA.Text = A + B
が成り立っちゃうからだろうと思います。A + B は文字列の
演算としても有効です。-B は有効でないので自動キャスト
を試みるのではないでしょうか。この辺りを曖昧にするクセを
つけてしまうと後々とんでもないバグを生む事になりかねません。
mady さんのおっしゃる通り明示的な型変換を心がけて下さい。
↑恥ずかしい失敗をしてしまた…( _)_ぺたり
ありがとうございました。
ふと思ったのですが、TextBoxのIMEModeを8(半角英数)にしたら半角英数しか入力できない状態にはなるのですが、
変換できる状態(点々の下線のある状態)になりますよね?
それをなくしたい場合はどうすればいいのでしょうか?
> それをなくしたい場合はどうすればいいのでしょうか?
『半角英数入力モード』にするのではなく、IMEをオフにしておくか、
もしくは、IMEを使えない状態にしておけば良いと思いますよ。
>魔界の仮面弁士
オフにすればできました。
ありがとうございました。
ツイート | ![]() |