- PR -

最小値〜最大値内かのチェック

投稿者投稿内容
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-01-20 17:34
記述されているコード中にCheckminmaxファンクションを使用している個所が無いからという理由だという事はありませんか?

つまり、呼んでないというオチ。

ちなみに、このCheckminMaxがあれば、その前にやる予定の文字列長のチェックとか、数値かどうかのチェックも不要に思えます。

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-01-20 17:37 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-20 18:02
引用:

M.Hさんの書き込み (2004-01-20 17:09) より:

この範囲チェックの前に数値チェックを入れているのですが、
その数値チェックでプログラムを終了されてしまい、
範囲チェックのプログラムの前で終了してしまいます。


 この文だと、「数値チェックがおかしい」ととれるのですが、そういうことでしょうか。

 デバッグモードで実行し、該当部分をステップ実行してください。そして、どの部分で期待しない動きになりますか?


 それと、『作成者 :Hara』・・・う〜ん?せめて『頂き物』にしましょうよ^^;。いや、古いハンドルが「Hana」なので、ちと焦った。
まち
常連さん
会議室デビュー日: 2003/03/02
投稿数: 26
お住まい・勤務地: 東京都
投稿日時: 2004-01-20 18:23
引用:

Jittaさんの書き込み (2004-01-20 18:02) より:
 それと、『作成者 :Hara』・・・う〜ん?せめて『頂き物』にしましょうよ^^;。いや、古いハンドルが「Hana」なので、ちと焦った。



ごめんなさい。。。
作成者の部分はプログラムのほうのも消そうと思っていて
忘れてしまいました。

引用:

ぢゃん♪さんの書き込み (2004-01-20 17:29) より:
入力内容が分からないので、変換結果が分かりません。
in_str_chkstr には、何が入っていますか?


ここで、in_str_chkstrに入っている数値は数字・小数点・マイナスが入っている数値
です。
例]0.1,-10,10,00等

です。上の数値を入れると数値チェックではOK
が表示されます。
(空白はNGです。)

引用:

NAL-6295さんの書き込み (2004-01-20 17:34) より:
ちなみに、このCheckminMaxがあれば、その前にやる予定の文字列長のチェックとか、数値かどうかのチェックも不要に思えます。



数値チェックはどうしても別でやる必要があるので、
数値チェックはそのままに、範囲チェックを入れたいのです。

アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2004-01-20 18:46
ども、アティです。
ちょっと、辛口にいいます。
まず、質問なんですけど、関数Checkminmaxをどこから呼び出しているか、示してもらいたいです。

引用:

引用:

NAL-6295さんの書き込み (2004-01-20 17:34) より:
ちなみに、このCheckminMaxがあれば、その前にやる予定の文字列長のチェックとか、数値かどうかのチェックも不要に思えます。



数値チェックはどうしても別でやる必要があるので、
数値チェックはそのままに、範囲チェックを入れたいのです。


なにか学校の課題なんですか?
であれば、範囲チェックの中の数値チェックを外に出さないと、
何かを丸写ししたのがバレバレになりますよ。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-20 19:02
引用:

M.Hさんの書き込み (2004-01-20 18:23) より:

ここで、in_str_chkstrに入っている数値は数字・小数点・マイナスが入っている数値
です。
例]0.1,-10,10,00等



 ん〜、integer(整数値)にしているんだから、0.1は落ちますねぇ。。。Decimalで受けてください。


 で、数値判定ですが、System.Convert.ToDecimalメソッドを使えば、トリムしたり何タラは不要です。

Dim d As Decimal
Try
 d = System.Convert.ToDecimal(入力文字列)
Catch ex As FormatException
 数値以外が入力されたときの処理
 Return Falseなど
End Try

たったこれだけのコードで判定できます。やっていることは、

文字列を数値に変換する→d = System.Convert.ToDecimal(入力文字列)
文字列が数値として無効なら変換できず、FormatExceptionが発生するので、それを受ける→Catch ex As FormatException
(前後の空白は無視されます)

これで数値にも変換しているので、dを使って値の上下限を判定すればOk!


トリムした値を書き戻すなら、.ToStringメソッドを使って文字列になおします。

TextBox1.Text = d.ToString
まち
常連さん
会議室デビュー日: 2003/03/02
投稿数: 26
お住まい・勤務地: 東京都
投稿日時: 2004-01-21 10:45
昨日はありがとうございました。
ここであげていただいたものを参考(丸写し・・・ですが)に
作成させていただいたプログラムを、提出したところOKが出ました。
本当にありがとうございました。
昨日のうちに書き込めれば良かったのですが、
ネットが重く、書き込むことが出来ませんでした。
すみません。

実際にOKがでたコードを入れておきます。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim bool_rtn As Boolean

bool_rtn = Checkminmax(TextBox1.Text, TextBox3.Text, TextBox4.Text)

If bool_rtn = True Then
TextBox2.Text = "OK"
Else
TextBox2.Text = "NG"

End If
End Sub

Private Sub Test(ByVal str)
Dim i_buf As String

i_buf = Str()

End Sub
'************************************************************
'関数名 :Checkvalue
'機能概要 :数値チェック
'引数   :in_str_buf…チェック対象文字列
'戻り値  :True/False
'作成日 :2004/01/15
'作成者 :kito
'備考 :
'履歴 :
'************************************************************
Public Function Checkvalue( _
ByVal in_str_buf As String _
) As Boolean
'*******
' 変数
'*******
Dim str_workbuf As String
Dim dbl_dt As Integer

'********
' 初期化
'********
Checkvalue = False

' 前後の空白をトリム
str_workbuf = Trim(in_str_buf)

'文字の長さが0かどうかチェック
If Len(str_workbuf) = 0 Then
Exit Function
End If

'数値かどうかチェック
If str_workbuf <> "" Then
If IsNumeric(str_workbuf) = True Then
End If
End If

Checkvalue = True

End Function

'************************************************************
'関数名 :Checkminmax
'機能概要 :最小値〜最大値チェック
'引数   :in_str_chkstr…チェック対象文字列
'戻り値  :True/False
'作成日 :2004/01/1x
'作成者 :
'備考 :チェック対象文字列稼動か判断した上で、
'  最小〜最大値内かチェックする。
'履歴 :
'************************************************************
Public Function Checkminmax( _
ByVal in_str_chkstr As String, _
ByVal in_int_min As Integer, _
ByVal in_int_max As Integer _
) As Boolean
Dim bl_minmax As Boolean
Dim int_num As Integer

Checkminmax = True

'最小値が最大値より大きい時はNG
If in_int_min >= in_int_max Then
Checkminmax = False
Exit Function
End If

Try
bl_minmax = Checkvalue(in_str_chkstr)
'数値チェック
int_num = CInt(in_str_chkstr)

'範囲チェック
If in_int_min > int_num Or _
int_num > in_int_max Then
Checkminmax = False
Exit Function
End If
Catch
Checkminmax = False
End Try
End Function
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-01-22 19:13
うーん、なんでこれでOKがでるのか気になったり…失礼。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-01-22 19:30
引用:

うーん、なんでこれでOKがでるのか気になったり…失礼。


ごめんなさい、ちょっと失礼な書き方でした。
内容のがどうこうについて文句を言いたかったわけではありませんです。

せっかく皆さんがいろいろと教えてくれたんですから、内容をきちんと理解するようにされたらいいのではないか(努力されてたらごめんなさい)ということと、もし、課題?が終わって、はい終了になってしまうと、皆さんが答えたことが無駄になってしまうかも…とちょっと思ったのでした。

スキルアップ/キャリアアップ(JOB@IT)