2011-10-28 8 views
4

私はダイスロールをシミュレートし、それらをチャート(ストリングリストのセット)の値と比較するプログラムを持っています。私は現在、TEditから値を取得しています。ボックスが空の場合、Try/Exceptステートメントで捕捉されるEConvertErrorが発生しますが、そうではありません。思考と助言?以下のコード、Delphi 7.なぜこのエラーをキャッチしないのですか?

try 
    //Shooting 
    if ShootingRadio.Checked then 
    BS := StrToInt(Edit1.Text); 
    Randomize; 
    Roll := RandomRange(1,7); 
    Label3.Caption := IntToStr(Roll); 
    if (Roll < StrToInt(ShootingHitChart[BS-1])) then 
    begin 
    Label3.Caption := (IntToStr(Roll)+' Miss'); 
    RichView1.AddTextNL((IntToStr(Roll)+' Miss'),7,0,1); 
    RichView1.Reformat; 
    end 
    else 
    begin 
    Label3.Caption := (IntToStr(Roll)+' Hit'); 
    RichView1.AddTextNL((IntToStr(Roll)+' Hit'),6,0,1); 
    RichView1.Reformat; 
    end; 
except 
    MessageBox(0,'No number entered.','Error',mb_OK); 
end; 
+2

デバッガなしで実行すると、それを捕まえることができます(プログラムをWindowsでは直接起動します)。 –

+1

if(ShootingRadio.Checked = True)と(TryStrToInt(Edit1.Text、BS))のStrToIntを変更してからbegin ... end; –

+0

tryとexceptの間に例外が発生した場合は、メッセージボックスが表示されます。したがって、私は例外が提起されていると結論づけています。新しい字下げが助けになりますか? –

答えて

8

デバッガオプションで 'Stop on Delphi exceptions'がチェックされています。例外は実際にはうまくキャッチされますが、取得するとIDEは停止します。実行を続行すると例外は表示されず、代わりにメッセージが表示されます。 IDEからは正常に動作します。

このオプションのチェックを外すことができます(通常はそうです)。あなたは頑固な問題をデバッグする必要があるときにいつでも再チェックすることができます。

+3

私はブレーク例外を優先します。私は何が起こっているのか知りたい。多くの例外を発生させるコードは、実際にフロー制御に使用されます(Indy、私はあなたを見ています)私は狂ってしまいます。 –

+1

@WarrenP 7についてはわかりませんが、最近のバージョンでは、無視する例外タイプのリストを選択できます。 – GolezTrol

+1

これが正解であれば、問題は間違っています!質問は、例外ハンドラは実行されないと言います!ああ、行こう。 –

関連する問題