C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: テキストボックスのデータ型判別


(過去ログ 118 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■69220 / inTopicNo.1)  テキストボックスのデータ型判別
  
□投稿者/ Яアルビノフォックス (14回)-(2013/12/10(Tue) 10:10:41)

分類:[.NET 全般] 

visual studio 2010 言語c#の質問です。

商品の値段を保存したいのでtextBoxに数字を入れて、それをデータベース保存しています。
それは良いのですが、エラーチェックに至って「値段欄に文字列を入れたとき」という項目がありました。

値段なのでデータベース該当欄のデータ型がintに設定してあり、入力時は
NewEquip.Casher = int.Parse(CasherRBox.Text);
としています。
この状態でCasherRBoxに数字以外の文字列を入れると当然エラーが出て止まります。
textboxなので入力したデータは全てstringで返ってきます。
if(CasherRBox.Text is int)では通りませんし、どうにも手が出ません。

文字列を入れたときにメッセージを返したいのですが、テキストボックスの中身が数字かどうか判別する方法はないのでしょうか?
よろしくお願いします。
引用返信 編集キー/
■69222 / inTopicNo.2)  Re[1]: テキストボックスのデータ型判別
□投稿者/ 魔界の仮面弁士 (460回)-(2013/12/10(Tue) 10:15:08)
No69220 (Яアルビノフォックス さん) に返信
> テキストボックスの中身が数字かどうか
TextBox.Text を使わずに、NumericUpDown.Value を使うとか。

> NewEquip.Casher = int.Parse(CasherRBox.Text);
int.Parse ではなく、int.TryParse を使いましょう。

> この状態でCasherRBoxに数字以外の文字列を入れると当然エラーが出て止まります。
Parse で行う場合は、try〜catch で処理しましょう。
引用返信 編集キー/
■69225 / inTopicNo.3)  Re[2]: テキストボックスのデータ型判別
□投稿者/ Яアルビノフォックス (16回)-(2013/12/10(Tue) 10:37:43)
No69222 (魔界の仮面弁士 さん) に返信
毎度お早いお返事ありがとうございます。

このようなコードを書いてみました。
string s = CasherRBox.Text;
int num;
if (int.TryParse(s, out num)) {
NewEquip.Casher = int.Parse(CasherRBox.Text);
}
else {
MessageBox.Show("" + s + "は数字ではありません。購入金額は数字で入力してください。");
return;
}

Try~catchtとNumericUpDown.Value は後日試してみます。
引用返信 編集キー/
■69226 / inTopicNo.4)  Re[1]: テキストボックスのデータ型判別
□投稿者/ an (12回)-(2013/12/10(Tue) 10:41:38)
No69220 (Яアルビノフォックス さん) に返信

> NewEquip.Casher = int.Parse(CasherRBox.Text);

TextBox等で無条件に入力されるなら、
魔界の仮面弁士さんが記載している通り、
int.TryParseにすべきでしょう。

> 文字列を入れたときにメッセージを返したいのですが、テキストボックスの中身が数字かどうか判別する方法はないのでしょうか?

別解として、
入力時のイベントで制御して数字以外入力できないようにしてしまうか、
int.Parseする前に正規表現にてチェックするかといったところでしょうか?

正規表現なら
string p = "^[0-9]{1,6}$";
bool b = System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, p);
のようにDBの桁数の範囲も同時にチェックできます。
1以上の値とか他にも条件があれば、工夫すればできると思いますが、
あまり正規表現に詳しくないので・・・。

ちなみに以下を参考にしました。
http://dobon.net/vb/dotnet/string/regex.html
引用返信 編集キー/
■69228 / inTopicNo.5)  Re[3]: テキストボックスのデータ型判別
□投稿者/ an (13回)-(2013/12/10(Tue) 14:11:06)
No69225 (Яアルビノフォックス さん) に返信

TryParseして正常にParse出来た場合、TryParseの2つ目の引数に値が戻ってきますので、
再度Parseする必要はありません。
以下のようにした方がすっきりすると思います。

string s = CasherRBox.Text;
int num;
if (int.TryParse(s, out num) == false) {
    MessageBox.Show("" + s + "は数字ではありません。購入金額は数字で入力してください。");
    return;
}
NewEquip.Casher = num;

#ちなみにテキストボックスが未入力の時にメッセージが変になっちゃいますね。

引用返信 編集キー/
■69232 / inTopicNo.6)  Re[1]: テキストボックスのデータ型判別
□投稿者/ WebSurfer (111回)-(2013/12/10(Tue) 16:22:31)
No69220 (Яアルビノフォックス さん) に返信
> 文字列を入れたときにメッセージを返したいのですが、テキストボックスの中身が数字かどうか判別する方法はないのでしょうか?

以下のページが参考になりませんか?

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

引用返信 編集キー/
■69249 / inTopicNo.7)  Re[2]: テキストボックスのデータ型判別
□投稿者/ Яアルビノフォックス (18回)-(2013/12/11(Wed) 11:19:40)
返信遅くなってしまい申し訳ありませんでした。

anさんのコードを参考にさせていただきます。
他の方も以後の糧とさせていただきます。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -