- PR -

VC++ textBoxの入力文字列をチェックする

1
投稿者投稿内容
osako
常連さん
会議室デビュー日: 2006/10/31
投稿数: 35
投稿日時: 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進数のパターンでフィルターを
かける程度しか、手法が思いつきません。
何か、良い方法はありませんか?

以上、ご回答のほどよろしくお願いします。

囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-10-31 19:17
コード:
try
{
	i = Int32::Parse( "あ", System::Globalization::NumberStyles::HexNumber );
}
catch( System::FormatException^ e )
{
	// ユーザーに再入力を促す?
}


このように例外処理します。
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-31 19:52
System::Int32::TryParse メソッド (System::Globalization::NumberStyles を
引数に持つオーバーロード) ではダメなのでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
osako
常連さん
会議室デビュー日: 2006/10/31
投稿数: 35
投稿日時: 2006-11-01 10:12
皆様、ご返答ありがとうございました。
入力を却下するだけの処理でよろしかったので、下記のようにしました。

int ret,idata;
ret=Int32::TryParse (textBox1->Text,NumberStyles::HexNumber,nullptr,idata);
if(ret==1)hScrollBar1->Value=idata;

解決できました。ありがとうございました。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-11-01 10:19
引用:

osakoさんの書き込み (2006-11-01 10:12) より:

int ret,idata;
ret=Int32::TryParse (textBox1->Text,NumberStyles::HexNumber,nullptr,idata);
if(ret==1)hScrollBar1->Value=idata;



Int32.TryParseメソッドの戻り値は bool ですので retの型も bool にしたほうがベターかと思います。

今回の場合、戻り値をつかわないでも、下記のようにかけますけど。
コード:

if (Int32::TryParse(textBox1->Text, NumberStyles::HexNumber, nullptr, idata))
{
    hScrollBar1->Value = idata;
}

osako
常連さん
会議室デビュー日: 2006/10/31
投稿数: 35
投稿日時: 2006-11-01 11:15
ご教授ありがとうございます。
いまいち、BOOLの意味が分からず、使わずに処理してしまいます。
戻り値がBOOL型の場合は、if判定には、「==true」のような記述はいらないのですね。
いろいろ見てたら、そう書いてありますよね。
勉強不足でパッとはでてきませんでした。
やはり、ソースはすっきりしてた方が良いので、そのように変更します。
ありがとうございました。
1

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