UIレイヤーとビジネスレイヤーに分割されたc#のプロジェクトがあります。基本的に口座を選択して入金番号を入力できるフォームがあります。[OK]ボタンをクリックすると、DepositTransaction.csがトランザクションを処理します。
DepositFormのサンプルコードは次のとおりです。
private void buttonOK_Click(object sender, EventArgs e) {
try {
bool inputTest;
decimal amount;
inputTest = decimal.TryParse(textBoxAmount.Text, out amount);
if (inputTest == false) {
throw new InvalidTransactionAmtException();
} else {
BankAccount account = comboBoxAccount.SelectedItem as BankAccount;
deposit = new DepositTransaction(account, amount);
this.DialogResult = DialogResult.OK;
}
} catch (InvalidTransactionAmtException ex) {
errorProviderDeposit.SetError(textBoxAmount, ex.Message);
textBoxAmount.Select();
textBoxAmount.SelectAll();
} catch (InvalidTransactionAmtNegativeException ex) {
errorProviderDeposit.SetError(textBoxAmount, ex.Message);
textBoxAmount.Select();
textBoxAmount.SelectAll();
} catch (AccountInactiveException ex) {
errorProviderDeposit.SetError(textBoxAmount, ex.Message);
textBoxAmount.Select();
textBoxAmount.SelectAll();
}
}
そして今、DepositTransactionのサンプルコード
public override void DoTransaction() {
try {
if (Amount <= 0) { //Amount is the amount passed by the form
throw new InvalidTransactionAmtNegativeException();
}
if (acc.Active == false) { //acc is the account passed by the form
throw new AccountInactiveException();
}
acc.Credit(Amount);
Summary = string.Format("{0} {1}", Date.ToString("yyyy-MM-dd"), this.TransactionType);
this.setStatus(TransactionStatus.Complete);
} catch (InvalidTransactionAmtNegativeException ex) {
throw;
} catch (AccountInactiveException ex) {
throw;
}
}
ただし、上記を試しても、エラーはフォームに渡されません。例外が処理されなかったと言ってプログラムをクラッシュさせるだけです。
エラーを渡す方法は単に使用することthrow:
であり、そのエラーはこのクラス(私の場合はフォーム)を呼び出したクラスに渡され、フォームで処理されるというスタックオーバーフローに関する別の質問を見ました。
私は何が間違っているのですか?ありがとうございました