Try〜Catch
文を使う
例
外が発生する条件・理由が明確でないとき、例外発生時に敢えてメッセージボックス等を表示したいときなどには、次のとおり
Try〜Catch文を使います。
例外が発生したことだけを表
示する、最も簡単な使い方は次のとおりです。
try
{
<例外が発生する可能性がある処理>
}
catch
{
MessageBox.Show("例外が発生しました。");
}
もう一歩踏み込んで、発生した例外を表示するには次のとお
りコーディングします。
例示すると、
try
{
<例外が発生する可能性がある処理>
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
//例外コードを表示する
}
これまでの例では、発生する例外をすべて捉える(Catchする)処理となっていますが、発生する例外の種類によって、発生後の処理を
変更したいことがあります。例えば、ファイル読込み処理の場合には、ファイル名自体が不適当である場合もありますし、呼び出したいファ
イルが指定したドライブパス上に存在しない場合があります。
前者の場合は、ファイル名を入れ直す処理を、後者の場合はファイル読込みを中止する処理を行う必要があります。
このような場合は、次例のようにコーディングします。
try
{
<ファイル読込み処理>
}
catch( FileNotFoundException ex )
{
MessageBox.Show("ファイル名" +
ex.FileName + "は存在しません");
<ファイル読込みを中止する処理>
catch
{
MessageBox.Show("ファイル
名が適正ではありません。再度、入力してください"); //例外コードを表示する
<ファイル名を入れ直す処理>
}
|
Finally文を使う
Catch文が、例外発生時のみに実行されるのに対し、Finally文は、正常終了時にも例外発生時にも必ず実行されます。
例えば、ファイルオープンが正常に行われ、その後のファイル読込み段階で例外(エラー)が発生した場合、例外をCatch
しただけでは、ファイルはオープンしたままの状態に置かれ、システムが不安定になります。
これを避けるため、例えば、
<ファイルのオープン処
理>
try { <ファイルの読込み処理> }
catch { <読込みエラー時の対処> }
finally {
<ファイルのクローズ処理> }
という組み立てをしておくと安心です。
|
Throw文を使う
例外は通常、C#のランタイムであるNETエンジンが発しますが、プログラム中から明示的に例外を発生させることができます。それが
Throw文です。
Throw文は、System.Exception
クラスの派生クラスを投げる(throwする)事になります。使い方の例は次のとおり。
if (textBox1.Text.IndexOf("#")!=-1) throw new
FormatException(); //英数字以外の#文字がテキストボックスに入力
された場合にフォーマットエラーを発生する
独自のエラーメッセージを創作することもできます。
if
(textBox1.Text.IndexOf("#")!=-1) throw New
ApplicationException("#文字はファイル名に使うことができません");
|