1

以下のコードでは、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 を割り当てようとする可能性があるためです。エラーが発生する可能性があります。

4

2 に答える 2

0

私は次のようなことを考えています:

bool exception_caught = false;
try {
    int newX = System::Convert::ToUInt32(this->cbXSizeBox->Text);
} catch (FormatException ^e) {
    //  Format exception code.
    exception_caught = true;
    // Handle Exception stuff
}

if (!exception_caught) {
    //  Other stuff.
}
于 2013-06-22T14:17:09.927 に答える