ハンドル型 の不等号を使用した比較をするには?

解決


くろのすけ  2006-09-15 19:02:04  No: 63023  IP: 192.*.*.*

くろのすけです。
毎度、お世話になってます。

Visual C++ 2005 C++/CLIでプログラムを作っています。
下記の①と②をそれぞれビルドしましたが、
①の条件判定(100と等しい)では、エラーがでないのに、
②の条件判定(100以上)だと、エラー(★印)が出ます。

--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
①エラー無し
if ( textMoney->Text == "100" )
{
  MessageBox::Show("指定されてた金額ではありません!!");
  return;
}
--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
②エラー有り
if ( textMoney->Text >= "100" )
{
  MessageBox::Show("指定されてた金額ではありません!!");
  return;
}
★エラー内容 → error C2865: '>=' : ハンドル型 の比較が正しくありません
--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Textの値によって条件判定したいのですが、等号による条件判定はできても、不等号による条件判定は不可能なのでしょうか?

お分かりの方、よろしくお願いします。

[※]  textName → System::Windows::Forms::TextBox^型です。
      Text → System::String^型です。

編集 削除
YuO  2006-09-15 19:09:06  No: 63024  IP: 192.*.*.*

文字列の比較は,基本的に等しいか等しくないかだけです。

大きい・小さいの比較は,String::Compare (or String::CompareTo)を使います。

編集 削除
Blue  2006-09-15 19:36:17  No: 63025  IP: 192.*.*.*

文字列を数値として判定するならば、Int32::Parse(もしくはInt32::TryParse)やConvert::ToInt32で数値型にしてから、
数値と判定してください。

if ( Int32::Parse( textMoney->Text ) >= 100 )

編集 削除
恭二  2006-09-15 19:41:32  No: 63026  IP: 192.*.*.*

MC++はよくわかりませんが、Textが文字列型ならば、
textMoney->Text == "100" は Text に格納されている文字列が "100" と一致するということです。

名前からすると金額のチェックを行いたいようですが、そういう場合は通常数値に変換してから利用します。
(単純に文字列比較を行いたいなら、YuOさんの方法で出来ます)

#C++/CLIはわからないので参考程度にC#のコードですが…
#System.Convert.ToInt32を使って変換
<C#>
void func()
{
  if( System.Convert.ToInt32(textMoney->Text, 10) >= 100 )
  {
    …
  }
}
</C#>

編集 削除
Blue  2006-09-15 19:52:32  No: 63027  IP: 192.*.*.*


C#のコードになっていないようですが。
> textMoney->Text,


ちなみに、数値文字列を文字列のまま比較すると、、、

    System::String^ x = L"100";
    System::String^ y = L"80";

    if ( System::String::Compare( x, y ) > 0 )
    {
        System::Console::WriteLine( "{0}>={1}", x, y );
    }
    else
    {
        System::Console::WriteLine( "{0}<{1}", x, y );
    }

の結果はどうなるでしょうか?
そしてなぜそうなるのでしょうか?

編集 削除
Blue  2006-09-15 19:53:41  No: 63028  IP: 192.*.*.*

訂正
>if ( System::String::Compare( x, y ) > 0 )
if ( System::String::Compare( x, y ) >= 0 )

人のこと言えませんでした。。。orz

編集 削除
くろのすけ  2006-09-15 21:07:42  No: 63029  IP: 192.*.*.*

くろのすけです。
皆様、回答本当にありがとうございます。

>文字列の比較は,基本的に等しいか等しくないかだけ

確かにそのとおりでした。(お恥ずかしい....)

実は、私はBlue様の仰っている下記の関数を使用したいのですが、
    Int32::Parse( textMoney->Text )
その際に、Int32::Parseの括弧の文字列が、
数値("0","1","2",etc)であるかないかを判別したいのです。
括弧内の文字列の内容が数値でない場合、
デバッグすると、この関数の箇所で、
-----------------------------------------------------------------
  'System.FormatException'のハンドルされていない例外がmscorlib.dllで発生しました。
  追加情報:入力文字列の形式が正しくありません。
----------------い-------------------------------------------------
というダイアログが出てしまうのです。
そのため、この関数を使用する前に、文字列の中身が
数値なのか?そうでないのか?をチェックしたいです。
しかし、その良い方法が考え付かないのです。

よろしければ、アドバイスいただけますか?

編集 削除
Blue  2006-09-15 21:11:48  No: 63030  IP: 192.*.*.*

でしたら、先にも解答してある、
Int32::TryParseでチェックするか、Convert::ToInt32で例外をキャッチするかしてください。

編集 削除
Blue  2006-09-15 21:19:51  No: 63031  IP: 192.*.*.*

Sample)

System::String^ x;
int num;

x = System::Console::ReadLine();
if ( int::TryParse( x, num ) )
{
    System::Console::WriteLine( L"{0} は {1} 以{2}。", x, 100, ( ( num >= 100 ) ? L"上" : L"下" ) );
}
else
{
    System::Console::WriteLine( L"{0} は数値に変換できない。", x ); 
}

編集 削除
くろのすけ  2006-09-15 21:26:12  No: 63032  IP: 192.*.*.*

Blue様、感謝します。

解決できました。

編集 削除
恭二  2006-09-16 22:46:06  No: 63033  IP: 192.*.*.*

ああ、くろのすけさんのコード見ながら書いたもんで、混ざってしまったみたいですorz
お恥ずかしい。

編集 削除