Моя проблема заключается в том, что я пытаюсь создать приложение, и, насколько я вижу, он должен быть чистым, и я не могу найти ошибку вообще.NullReferenceException Unhandled (Не удается найти источник ошибки)
Вот мой код ниже. Я прокомментирую, где ошибка. Форма Код
namespace TechBank
{
public partial class Tech_Bank : Form
{
CAccount currentAccount = null;
CBank myBank = new CBank();
private void displayBalance()
{
if (lstAccounts.Items.Count != 0)
{
txtBalance.Text = currentAccount.Balance.ToString; //where the error hits
txtCustomer.Text = currentAccount.CustomerName;
txtAccountType.Text = Convert.ToString(currentAccount.AccountType);
}
}
private void button1_Click(object sender, EventArgs e)
{
Open_Account form = new Open_Account();
form.ShowDialog();
if (form.DialogResult == DialogResult.OK)
{
currentAccount = new CAccount(typeAccount.checking, "", 4);
if (form.rbtChequing.Checked)
currentAccount.AccountType = typeAccount.checking;
if (form.rbtSavings.Checked)
currentAccount.AccountType = typeAccount.savings;
try
{
currentAccount.Balance = Convert.ToDouble(form.txtStartingBalance.Text);
}
catch (FormatException)
{
MessageBox.Show("Please enter valid information", "Error in account creation, please double check the values are correct");
}
currentAccount.CustomerName = form.txtCustomerName.Text;
myBank.OpenAccount(currentAccount);
lstAccounts.Items.Add(currentAccount.AccountID);
currentAccount = myBank.GetAccount(lstAccounts.SelectedIndex);
lstAccounts.SelectedIndex = lstAccounts.Items.Count - 1;
displayBalance();
}
}
private void button2_Click(object sender, EventArgs e)
{
Transaction form = new Transaction(currentAccount);
form.ShowDialog();
if (form.DialogResult == DialogResult.OK)
{
}
displayBalance();
}
private void button3_Click(object sender, EventArgs e)
{
if (lstAccounts.Items.Count != 0)
{
myBank.CloseAccount(currentAccount);
lstAccounts.Items.RemoveAt(lstAccounts.SelectedIndex);
txtAccountType.Clear();
txtBalance.Clear();
txtCustomer.Clear();
}
}
private void btnExit_Click(object sender, EventArgs e)
{
System.Environment.Exit(0);
}
private void lstAccounts_SelectedIndexChanged(object sender, EventArgs e)
{
currentAccount = myBank.GetAccount(lstAccounts.SelectedIndex);
displayBalance();
}
}
}
CAccount.cs Код Ниже
namespace TechBank
{
public enum typeAccount
{
checking,
savings
}
public class CAccount
{
private static Random randomNumber = new Random();
private typeAccount mAccountType;
private double mBalance;
private string mCustomer;
private string mID;
public CAccount(typeAccount newType, string newCustomer, double newBalance)
{
mAccountType = newType;
mCustomer = newCustomer;
mBalance = newBalance;
mID = Convert.ToString(randomNumber.Next(1, 9999));
}
public typeAccount AccountType
{
get { return mAccountType; }
set { mAccountType = value; }
}
public double Balance
{
get { return mBalance; }
set { mBalance = value; }
}
public string CustomerName
{
get { return mCustomer; }
set { mCustomer = value; }
}
public string AccountID
{
get { return mID; }
}
public void Deposit(double Amount)
{
if (IsPositiveNumber(Amount, 0))
mBalance += Amount;
}
public bool IsPositiveNumber(double larger, double smaller)
{
return (larger >= smaller);
}
public void Withdraw(double Amount)
{
if (IsPositiveNumber(mBalance, Amount))
mBalance -= Amount;
}
}
}
Пожалуйста, сообщите мне, если вам нужно больше кода.
Он показывает, где произошла ошибка, а также инициализирует currentAccount в обработчике событий кнопки. – Inisheer
Покажите нам полное исключение, включая трассировку стека и т. Д. –
Это была бы прекрасная возможность научиться более эффективно использовать ваш отладчик. Если вы используете Visual Studio, используйте параметр Debug -> Exceptions, чтобы разрешить нарушение любого исключения CLR. Теперь ваше приложение будет ломаться, когда генерируется исключение, а не когда оно необработано - это даст вам возможность просмотреть все состояние приложения и действительно понять, что происходит. Если вы не используете VS - большинство других отладчиков (включая WinDbg, mdbg и т. Д.) Поддерживают это. –