WinFormsで学ぶ「例外処理」

― アプリを落とさないための第一歩 ―

現在、Windowsアプリケーションの作成に入り、

  • ボタンのイベント
  • 消費税計算機
  • TryParseによる入力チェック

まで進みました  

ここで次に大事になるのが 例外処理(Exception Handling) です。


■ 例外とは何か?

次のコードを見てください。

int value = int.Parse(textBox1.Text);

もし TextBox に

abc

と入力したらどうなるでしょう?

→ アプリが落ちます。

これが 例外(Exception) です。

例外とは、

「想定外のエラーが起きました」という通知

のことです。


■ なぜ例外処理が必要なのか?

アプリが落ちると、

  • ユーザーは困る
  • 作った人の評価が下がる
  • 実務では信用問題になる

だから、

エラーが起きても落ちない仕組み

が必要です。


■ try-catch の基本

例外を捕まえるには、次の形を使います。

try
{
    int value = int.Parse(textBox1.Text);
    label1.Text = value.ToString();
}
catch
{
    MessageBox.Show("数値を入力してください");
}

流れ

  • try:まずやってみる
  • catch:エラーが起きたらここに来る

これでアプリは落ちません。


■ 例外の種類を指定する

より丁寧に書くこともできます。

try
{
    int value = int.Parse(textBox1.Text);
}
catch (FormatException)
{
    MessageBox.Show("数値形式が違います");
}

FormatException は

「数値に変換できません」という意味の例外です。


■ TryParseとの違い

すでに学んだ TryParse と比較してみましょう。

int value;
if (int.TryParse(textBox1.Text, out value))
{
    label1.Text = value.ToString();
}
else
{
    MessageBox.Show("数値を入力してください");
}

違い

TryParsetry-catch
失敗を想定している想定外のエラーを捕まえる
戻り値で判定例外を捕まえる
入力チェック向きファイルや通信向き

実務での使い分け

  • 入力チェック → TryParse
  • ファイル操作 → try-catch
  • 通信処理 → try-catch

■ 非同期処理と例外

これから学ぶ非同期処理(async / await)でも例外は発生します。

private async void button1_Click(object sender, EventArgs e)
{
    try
    {
        await Task.Delay(3000);
        throw new Exception("エラーが発生しました");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

ポイントは:

await の中でも例外は発生する

必ず try-catch で囲む


■ 例外処理の考え方

例外処理は

「エラーを消す技術」ではありません。

正しくは、

エラーと向き合う技術

です。


■ 授業での理解ポイント

  1. int.Parseで落ちる体験をする
  2. try-catchで守る
  3. TryParseとの違いを理解する
  4. asyncの中でも使う

ここまで理解できれば十分です。


■ まとめ

✔ アプリは放っておくと落ちる

✔ try-catchで守れる

✔ TryParseとは役割が違う

✔ 非同期処理でも必要

WinFormsを学ぶ今のタイミングで、

「落ちないアプリを作る」という視点を持つことが重要です。

訪問数 1 回, 今日の訪問数 1回

C#,例外

Posted by hidepon