C#冻结列表框(Windows窗体应用程序)
本文关键字:窗体 应用程序 Windows 冻结 列表 | 更新日期: 2023-09-27 18:27:13
我正在制作一个简单的BankingApp,它将客户及其账户保存在两个单独的列表框中。在列表框中选择一个客户时,相关帐户将显示在第二个列表框中,用户应该能够添加、删除、更新客户和帐户。每当我尝试将客户添加、删除或更新到列表框时,它都会锁定到客户列表框中的一个项目。该应用程序不会崩溃,只是在特定项目上冻结。但我仍然可以选择另一个客户并查看其信息,即使它已经锁定在另一个顾客项目上。??你知道我在代码中做错了什么吗?
我删除客户的按钮:private void button TaBort_Click(object sender,EventArgs e)不工作,而我更新客户的按钮是private void utton OkUppdater_Click(object sender,EventArgs e?
我知道我的代码有点乱,几周前我刚开始学习:)尽我所能掌握窍门。
[Serializable]
public partial class BankenAppen : Form
{
List<Kund> KundLista = new List<Kund>();
Kund aktuellKund = new Kund();
Konto aktuelltKonto = new Konto();
List<Konto> KontoLista = new List<Konto>();
public BankenAppen()
{
InitializeComponent();
FileStream fs = new FileStream("BankenAppenLista.bin", FileMode.OpenOrCreate, FileAccess.Read);
BinaryFormatter bf = new BinaryFormatter();
try
{
KundLista = (List<Kund>)bf.Deserialize(fs);
}
catch
{
MessageBox.Show("Tomt");
}
fs.Close();
fs.Dispose();
textBoxKontoNr.Enabled = false;
textBoxSaldo.Enabled = false;
textBoxRänta.Enabled = false;
listBoxKunder.DataSource = KundLista;
}
public void EnableMetod()
{
textBoxFörNamn.Enabled = true;
textBoxEfternamn.Enabled = true;
textBoxPersonnummer.Enabled = true;
textBoxGatuAdress.Enabled = true;
textBoxTelefon.Enabled = true;
textBoxMobil.Enabled = true;
}
public void DisableMetod()
{
textBoxFörNamn.Enabled = false;
textBoxEfternamn.Enabled = false;
textBoxPersonnummer.Enabled = false;
textBoxGatuAdress.Enabled = false;
textBoxTelefon.Enabled = false;
textBoxMobil.Enabled = false;
}
public void ClearMetod()
{
textBoxFörNamn.Clear();
textBoxEfternamn.Clear();
textBoxPersonnummer.Clear();
textBoxGatuAdress.Clear();
textBoxTelefon.Clear();
textBoxMobil.Clear();
}
public void SparaMetod()
{
FileStream fs = new FileStream("BankenAppenLista.bin", FileMode.OpenOrCreate, FileAccess.Write);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, KundLista);
fs.Close();
}
private void Kunderna()
{
listBoxKunder.DataSource = null;
listBoxKunder.Items.Clear();
foreach (Kund kunder in KundLista)
{
listBoxKunder.Items.Add(kunder);
}
}
private void Konton()
{
listBoxKonto.Items.Clear();
foreach (Konto konton in aktuellKund.kontolista)
{
listBoxKonto.Items.Add(konton);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void buttonOkLäggTill_Click(object sender, EventArgs e)
{
listBoxKunder.DataSource = null;
Kund Kunder = new Kund
{
Förnamn = textBoxFörNamn.Text,
Efternamn = textBoxEfternamn.Text,
Personnummer = textBoxPersonnummer.Text,
GatuAdress = textBoxGatuAdress.Text,
Telefon = textBoxTelefon.Text,
Mobil = textBoxMobil.Text
};
KundLista.Add(Kunder);
listBoxKunder.Items.Add(Kunder);
listBoxKunder.DataSource = KundLista;
SparaMetod();
DisableMetod();
ClearMetod();
}
private void buttonLäggTill_Click(object sender, EventArgs e)
{
EnableMetod();
ClearMetod();
}
private void listBoxKunder_SelectedIndexChanged(object sender, EventArgs e)
{
aktuellKund = (Kund)listBoxKunder.SelectedItem;
listBoxKunder.DataSource = KundLista;
listBoxKonto.Items.Clear();
foreach (Konto item in aktuellKund.kontolista)
{
listBoxKonto.Items.Add(item);
}
if(aktuellKund!= null)
{
textBoxFörNamn.Text = aktuellKund.Förnamn;
textBoxEfternamn.Text = aktuellKund.Efternamn;
textBoxPersonnummer.Text = aktuellKund.Personnummer;
textBoxGatuAdress.Text = aktuellKund.GatuAdress;
textBoxTelefon.Text = aktuellKund.Telefon;
textBoxMobil.Text = aktuellKund.Mobil;
}
}
private void buttonTaBort_Click(object sender, EventArgs e)
{
listBoxKunder.DataSource = null;
listBoxKunder.Items.Clear();
KundLista.Remove(aktuellKund);
SparaMetod();
Kunderna();
ClearMetod();
listBoxKunder.DataSource = KundLista;
}
private void buttonUppdatera_Click(object sender, EventArgs e)
{
EnableMetod();
textBoxPersonnummer.Enabled = false;
}
private void buttonOkUppdatera_Click(object sender, EventArgs e)
{
aktuellKund.BytaAdress(textBoxFörNamn.Text, textBoxEfternamn.Text, textBoxGatuAdress.Text, textBoxTelefon.Text, textBoxMobil.Text);
SparaMetod();
Kunderna();
DisableMetod();
}
private void buttonLäggTillKonto_Click(object sender, EventArgs e)
{
textBoxKontoNr.Enabled = true;
textBoxSaldo.Enabled = true;
textBoxRänta.Enabled = true;
textBoxKontoNr.Clear();
textBoxSaldo.Clear();
textBoxRänta.Clear();
}
private void buttonOkÖppnaKonto_Click(object sender, EventArgs e)
{
listBoxKonto.DataSource = null;
if (String.IsNullOrEmpty(textBoxKontoNr.Text) && String.IsNullOrEmpty(textBoxSaldo.Text) && String.IsNullOrEmpty(textBoxRänta.Text))
{
MessageBox.Show("Fyll i Kontouppgifter Tack!");
}
else
{
Konto nyttkonto;
if (radioButtonPrivat.Checked)
{
Privat Pkonto = new Privat
{
KontoNummer = textBoxKontoNr.Text,
Saldo = int.Parse(textBoxSaldo.Text),
Ränta = double.Parse(textBoxRänta.Text)
};
nyttkonto = Pkonto;
textBoxKontoNr.Text = "";
textBoxSaldo.Text = "";
textBoxRänta.Text = "";
}
else if (radioButtonFramtid.Checked)
{
Framtid Fkonto = new Framtid
{
KontoNummer = textBoxKontoNr.Text,
Saldo = int.Parse(textBoxSaldo.Text),
Ränta = double.Parse(textBoxRänta.Text)
};
nyttkonto = Fkonto;
}
else
{
Service Skonto = new Service
{
KontoNummer = textBoxKontoNr.Text,
Saldo = int.Parse(textBoxSaldo.Text),
Ränta = double.Parse(textBoxRänta.Text)
};
nyttkonto = Skonto;
}
aktuellKund.ÖppnaKonto(nyttkonto);
SparaMetod();
Konton();
textBoxKontoNr.Enabled = false;
textBoxSaldo.Enabled = false;
textBoxRänta.Enabled = false;
}
}
private void listBoxKonto_SelectedIndexChanged(object sender, EventArgs e)
{
aktuelltKonto = (Konto)listBoxKonto.SelectedItem;
if (aktuelltKonto != null)
{
textBoxKontoNr.Text = aktuelltKonto.KontoNummer;
textBoxSaldo.Text = aktuelltKonto.Saldo.ToString();
textBoxRänta.Text = aktuelltKonto.Ränta.ToString();
}
}
private void buttonInUt_Click(object sender, EventArgs e)
{
int insättning = int.Parse(textBoxInsättning.Text);
aktuelltKonto.Saldo = aktuelltKonto.Saldo + insättning;
aktuelltKonto.Insättning(aktuelltKonto.Saldo);
textBoxKontoNr.Text = aktuelltKonto.KontoNummer;
textBoxSaldo.Text = aktuelltKonto.Saldo.ToString();
textBoxRänta.Text = aktuelltKonto.Ränta.ToString();
SparaMetod();
textBoxInsättning.Clear();
}
private void buttonUttag_Click(object sender, EventArgs e)
{
int uttag = int.Parse(textBoxUttag.Text);
aktuelltKonto.Saldo = aktuelltKonto.Saldo - uttag;
aktuelltKonto.Insättning(aktuelltKonto.Saldo);
textBoxKontoNr.Text = aktuelltKonto.KontoNummer;
textBoxSaldo.Text = aktuelltKonto.Saldo.ToString();
textBoxRänta.Text = aktuelltKonto.Ränta.ToString();
SparaMetod();
textBoxUttag.Clear();
}
private void buttonAvslutaKonto_Click(object sender, EventArgs e)
{
//listBoxKonto.DataSource = null;
aktuelltKonto = (Konto)listBoxKonto.SelectedItem;
KontoLista.Remove(aktuelltKonto);
// listBoxKonto.DataSource = KontoLista;
SparaMetod();
Konton();
textBoxKontoNr.Clear();
textBoxRänta.Clear();
textBoxSaldo.Clear();
}
}
我的客户类别
[Serializable]
class Kund
{
//Properties
public string Förnamn { get; set; }
public string Efternamn { get; set; }
public string Personnummer { get; set; }
public string GatuAdress { get; set; }
public string PostAdress { get; set; }
public string Telefon { get; set; }
public string Mobil { get; set; }
public List<Konto> kontolista
{
get; set;
}
public Kund()
{
kontolista = new List<Konto>();
}
// Metoder
public void BytaAdress(string nyttFörnamn, string nyttEfternamn, string nyGatuAdress, string nyTelefon, string nyMobil)
{
Förnamn = nyttFörnamn;
Efternamn = nyttEfternamn;
GatuAdress = nyGatuAdress;
Telefon = nyTelefon;
Mobil = nyMobil;
}
public void ÖppnaKonto(Konto nyttKonto)
{
kontolista.Add(nyttKonto);
}
public override string ToString()
{
return Förnamn + " " + Efternamn;
}
}
查看内联注释
// assuming by the name this is only for the listBoxKunder
// and every time the selected index changes, this method is invoked
private void listBoxKunder_SelectedIndexChanged(object sender, EventArgs e)
{
aktuellKund = (Kund)listBoxKunder.SelectedItem;
// here you are changing the data source of the list box and this should/may cause
// the selected index to change! This in turn calls this method again
// To fix this, to not modify the DataSource property in respnse to a SelectedIndexChanged event
listBoxKunder.DataSource = KundLista;
listBoxKonto.Items.Clear();
foreach (Konto item in aktuellKund.kontolista)
{
listBoxKonto.Items.Add(item);
}
if(aktuellKund!= null)
{
textBoxFörNamn.Text = aktuellKund.Förnamn;
textBoxEfternamn.Text = aktuellKund.Efternamn;
textBoxPersonnummer.Text = aktuellKund.Personnummer;
textBoxGatuAdress.Text = aktuellKund.GatuAdress;
textBoxTelefon.Text = aktuellKund.Telefon;
textBoxMobil.Text = aktuellKund.Mobil;
}
}