VCL アプリケーションの例外処理
例外処理:インデックス への移動
ユーザーのアプリケーションの VCL コンポーネントまたは VCL ランタイム ライブラリを使用する場合は、VCL 例外処理メカニズムを理解する必要があります。 例外は多くの VCL クラスやルーチンに組み込まれており、予期しない事態が発生すると、自動的にスローされます。 一般に、これらの例外は、処理しないとランタイム エラーを生成するようなプログラミング エラーを示します。 これらのクラスの一部が「VCL 例外クラス」に記載されています。
コンポーネントの例外を処理するメカニズムは、他の型の例外を処理する方式と違いはありません。
ユーザーが例外を処理しない場合は、VCL により「デフォルト方式」で処理されます。 通常は、どのような種類のエラーが発生したかを示すメッセージが表示されます。 アプリケーションをデバッグするときに、オンライン ヘルプで例外クラスを調べることができます。 入手できる情報は、エラーが発生した場所と原因を特定するのに役に立ちます。
例外の一部のクラスでは、デフォルト ハンドラにより捕捉されたときにエラー メッセージが表示されません。 「サイレント例外」に説明があります。
コンポーネントにあるエラーの共通ソースは、インデックス付きのプロパティにある範囲エラーです。 たとえば、リスト ボックスのリストに 3 つの項目(0..2)があり、ユーザーのアプリケーションが番号 3 の項目にアクセスを試行すると、リスト ボックスにより "List index out of bounds" 例外が発生します。
次のイベント ハンドラには、リスト ボックスでの不正なインデックスのアクセスをユーザーに通知するための、例外ハンドラが含まれます。
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add('a string');{ 文字列をリストボックスへ追加 }
ListBox1.Items.Add('another string');{ 別の文字列を追加.... }
ListBox1.Items.Add('still another string');{ ...そして 3 つ目の文字列 }
try
Caption := ListBox1.Items[3];{ フォーム キャプションを 4 つ目の文字列に設定 }
except
on EStringListError do
ShowMessage('List box contains fewer than four strings');
end;
end;
ボタンを 1 回クリックすると、リスト ボックスには 3 つの文字列だけがあり、したがって 4 番目の文字列にアクセスすると例外が発生します。 2 回目にクリックすると、さらに文字列がリストに追加されます。したがって例外が発生しなくなります。
VCL により発生する例外の処理に加えて、独自の VCL ベースの例外クラスを定義し、発生させることができます。 「ユーザー独自の VCL 例外を定義する」に説明があります。