2015-12-18 45 views
-1

我正在制作一个简单的BankingApp,用于将客户和他们的帐户保存在两个单独的列表框中。在第二个列表框中显示在列表框相关账户中选择一个客户时,用户应该能够添加,删除,更新客户和账户。每当我尝试添加,删除或更新客户到列表框时,它都会锁定客户列表框中的一个项目。该应用程序不会崩溃只是冻结该特定项目。但是我仍然可以选择另一位顾客并查看其信息,即使它已经锁定在另一个顾客项目上。 任何想法我做错了我的代码?我的按钮删除客户:私人无效buttonTaBort_Click(对象发件人,EventArgs e)不工作,我的按钮:私人无效buttonOkUppdatera_Click(对象发件人,EventArgs e)更新客户是行不通的?C#冻结列表框(Windows窗体应用程序)

我知道我的代码有点混乱,我刚刚开始学习几个星期前:)尽我所能去掌握一切。

[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; 
    } 
} 
+1

你或许应该表现出你的应用程序的更紧凑的一部分,具体是什么不为你工作,因为我发现很难全面了解您的应用实际在做什么。 – joko

+0

对不起。我的错。我的butto:私人无效buttonTaBort_Click(对象发件人,EventArgs e)不工作,我的按钮:私人无效buttonOkUppdatera_Click(对象发件人,EventArgs e)更新客户不工作,因为他们应该。 –

+0

寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 – Albireo

回答

0

见联注释

// 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; 
    } 
} 
相关问题