2015-12-18 47 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; 
    } 
} 
相關問題