- - PR -
VC++ textBoxの入力文字列をチェックする
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-31 18:04
VC++expressを使い始めたばかりの初心者です。
よろしくお願いします。 textBoxにて、16進数をイメージして文字入力を行い、 たとえば、0xA0なら、A0というように文字入力し、 Int32::Parse (textBox1->Text,NumberStyles::HexNumber) でSystemStringから10進数へと変換するようにしています。 それで、文字入力を16進数ではない文字列を入力された場合、 Int32::Parse (textBox1->Text,NumberStyles::HexNumber) でエラーになってしまいます。 フィルターかけたりとか、型のチェックで未然に防げるように したいのですが、今のところ、全16進数のパターンでフィルターを かける程度しか、手法が思いつきません。 何か、良い方法はありませんか? 以上、ご回答のほどよろしくお願いします。 | ||||||||
|
投稿日時: 2006-10-31 19:17
このように例外処理します。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-10-31 19:52
System::Int32::TryParse メソッド (System::Globalization::NumberStyles を
引数に持つオーバーロード) ではダメなのでしょうか。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-11-01 10:12
皆様、ご返答ありがとうございました。
入力を却下するだけの処理でよろしかったので、下記のようにしました。 int ret,idata; ret=Int32::TryParse (textBox1->Text,NumberStyles::HexNumber,nullptr,idata); if(ret==1)hScrollBar1->Value=idata; 解決できました。ありがとうございました。 | ||||||||
|
投稿日時: 2006-11-01 10:19
Int32.TryParseメソッドの戻り値は bool ですので retの型も bool にしたほうがベターかと思います。 今回の場合、戻り値をつかわないでも、下記のようにかけますけど。
| ||||||||
|
投稿日時: 2006-11-01 11:15
ご教授ありがとうございます。
いまいち、BOOLの意味が分からず、使わずに処理してしまいます。 戻り値がBOOL型の場合は、if判定には、「==true」のような記述はいらないのですね。 いろいろ見てたら、そう書いてありますよね。 勉強不足でパッとはでてきませんでした。 やはり、ソースはすっきりしてた方が良いので、そのように変更します。 ありがとうございました。 |
1