データベースに記録された画像名を確認する方法があります。そのようなものがある場合は、記録されたパスで画像をロードしようとします。ない場合は、デフォルトの画像を読み込みます。
最初に、返された例外が何であれ、try-catch
ブロック内にメソッド全体がありました。catch(Exception ex)
Error loading image
if (File.Exists(imgPath + "\\" + imageName))
{
try
{
using (var temp = new Bitmap(imgPath + "\\" + imageName))
{
pictureBox1.Image = new Bitmap(temp);
}
if (pictureBox1.Image.Width > defaultPicBoxWidth)
{
pictureBox1.Width = defaultPicBoxWidth;
}
}
catch (Exception ex)
{
logger.Error(ex.ToString());
MessageBox.Show("Error loading image!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
次に、データベースにレコードがある場合があることがわかりましたが、何らかの理由でファイルが欠落している可能性があるため、そのチェックを追加します。
if (imageName != null && !File.Exists(imgPath + "\\" + imageName))
今度は、この場合にも適切なメッセージが必要です。try-catch
私は、いくつかのブロックを使用してそれらの部分を処理するか、例外をスローして、メソッドが呼び出された場所から例外を処理することができるという結論に達しました。
私は2番目のオプションを選択しましたが、コード全体は次のとおりです。
if (imageName != null && !File.Exists(imgPath + "\\" + imageName))
{
throw new FileNotFoundException();
}
if (File.Exists(imgPath + "\\" + imageName))
{
//try
//{
using (var temp = new Bitmap(imgPath + "\\" + imageName))
{
pictureBox1.Image = new Bitmap(temp);
}
if (pictureBox1.Image.Width > defaultPicBoxWidth)
{
pictureBox1.Width = defaultPicBoxWidth;
}
//}
//catch (Exception ex)
//{
// logger.Error(ex.ToString());
// MessageBox.Show("Error loading image!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
//}
}
そして、これは私がメソッドを呼び出す場所です:
try
{
//The name of the method described above
LoadSavedOrDefaultImage(imageInfo, entity.Picture, txtCode.Text, imageLocation);
}
catch (FileNotFoundException ex)
{
logger.Error(ex.ToString());
MessageBox.Show("Error loading image! The file wasn't found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception ex)
{
LogErrorAndShowMessage(ex, Resources.ERROR_LOAD);
}
私はこれの方が好きですが、その理由を正確に言うことはできません。一般的な質問は、例外を処理するこの正しい方法ですか。try-catch
そして、より具体的なもの-私の正確なケースでは、ブロックを配置するのに適した場所はどこですか? メソッド自体の本体にいることは理にかなっています。そうすれば、try-catch
メソッドを呼び出すすべての場所にこれらのブロックを書き込む必要がなくなり、この方法でさらにカプセル化されるからです。また、現在は2つのtry-catch
ブロックがありますが、将来ロジックが変更された場合は、さらに異なる例外をスローしたい場合があります。あなたの意見を読むために。