Business Layer - UI communication
A third option is to use continuations:

public void DeleteAccount(string accountId, Action&lt;string&gt; OnAccountInUse, Func&lt;string,bool&gt; OnConfirmation)
{
    var bookingsUsingAccount = GetBookingsUsingAccount(accountId);
    if (bookingsUsingAccount.Count &gt; 0)
    {           
        OnAccountInUse("msg");
        return;
    }
    BankAccount account = GetAccount(accountId);
    if (OnConfirmation("confirm"))
    {
        account.Delete(false);
    }
}


edit: adding the usage, similar to the cases in the question

private void cmdDelete_enterClick(object sender, EventArgs e)
{               
    var accountManager = new BLAccountManager();

    Func&lt;string,bool&gt; OnConfirmation = (msg) =&gt;
    {
        var dialogResult = MessageBox.Show(msg);
        return (dialogResult == DialogResult.OK);
    };

    accountManager.DeleteAccount(selectedAccountId,
                                 (msg) =&gt; MessageBox.Show(msg),
                                 OnConfirmation);
}