以下のコードでは、Uint32 に変換されている string^ があります。
try
{
int newX = System::Convert::ToUInt32(this->cbXSizeBox->Text);
}
catch (FormatException^ e)
{
printf("\nNot a valid 3-digit number");
this->cbXSizeBox->Text = System::Convert::ToString(capBoxSize->x);
}
これは正常に機能します (参考までに、capBoxSize->x は、uint32 に評価できる別の値です)。
基本的には、cbXSizeBox->Text (文字列) の値をスナップして、ユーザーが数字以外 (2g9 など) を入力した場合にデフォルト値に戻します。
catch ブロックがフォーマットの例外をキャッチしない場合、capBoxSize->x の値を新しい有効な値に変更するコードを追加したいと思います。コンパイラに「この例外をキャッチしたら、これを実行してください。ただし、例外をキャッチしない場合は、これを実行してください」という何かを見つけようとしています。if else ステートメントで catch ブロックをラップすることは可能ですか?
私がやろうとしていることを理解していれば、どんな提案もいただければ幸いです。
PS capBoxSize->x を変更するコードを try ブロックに入れることは、実際にはオプションではないと思います。これは、Uint32 である capBoxSize->X に "2ty" のようなものとして newX を割り当てようとする可能性があるためです。エラーが発生する可能性があります。