2012-04-04 18 views
2

Ich arbeite an einem Programm für die Schule. Es ist eine C# -GUI mit zwei Registerkarten.Anzeigen mehrerer Informationen aus einer Combobox-Auswahl?

Auf der ersten Registerkarte kann der Benutzer Informationen über ein neues Bankkonto wie Name, Konto-ID, Alter und Kontostand eingeben. Es gibt auch eine Schaltfläche, die den Namen des Benutzers in eine Combobox auf der zweiten Registerkarte setzt. Die zweite Registerkarte enthält die Combobox und einige Textfelder für: Name, ID, Alter und Balance.

Das Problem, mit dem ich konfrontiert bin, ist, dass, wenn ich einen Namen aus der Combobox auswähle, es nicht alle Textfelder auffüllt. Ich habe den Namen Textfeld herausgefunden, weil ich es direkt aus der Combobox ziehe. Aber ich kann nicht herausfinden, wie man die anderen Textfelder bevölkert: ID, Alter und Balance. Hier ist, was ich bisher haben ...

class BankAccount 
    { 
     //attributes 
     private string accountID; 
     private string customerName; 
     private int customerAge; 
     private double balance; 
     private const double DEFAULT_BALANCE = 500.00; 

     //construct 
     public BankAccount() 
     { 
     } 

     public BankAccount(string anID, string aName, int anAge, double aBalance) 
     { 
      accountID = anID; 
      customerName = aName; 
      customerAge = anAge; 
      balance = aBalance; 
     } 

     public BankAccount(string anID, string aName, int anAge) 
     { 
      accountID = anID; 
      customerName = aName; 
      customerAge = anAge; 
      balance = DEFAULT_BALANCE; 
     } 


     //accessors 
     public void SetID(string anID) 
     { 
      accountID = anID; 
     } 

     public void SetName(string aName) 
     { 
      customerName = aName; 
     } 

     public void SetAge(int anAge) 
     { 
      customerAge = anAge; 
     } 

     public void SetBalance(double aBalance) 
     { 
      balance = aBalance; 
     } 

     public string GetID() 
     { 
      return accountID; 
     } 

     public string GetName() 
     { 
      return customerName; 
     } 

     public int GetAge() 
     { 
      return customerAge; 
     } 

     public double GetBalance() 
     { 
      return balance; 
     } 



and this is the form 

    public partial class Form1 : Form 
    { 
     ArrayList account = new ArrayList(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 



     private void btnAddAccount_Click(object sender, EventArgs e) 
     { 
      BankAccount aBankAccount = new BankAccount(txtAccountID.Text, txtName.Text, 
       int.Parse(txtAge.Text), double.Parse(txtBalance.Text)); 

      account.Add(aBankAccount); 
      AddToComboBox(); 
      ClearText(); 


     } 

     private void AddToComboBox() 
     { 
      cboAccount.Items.Clear(); 
      foreach (BankAccount person in account) 
      { 
       cboAccount.Items.Add(person.GetName()); 


      } 






     } 
     private void ClearText() 
     { 
      txtName.Clear(); 
      txtAccountID.Clear(); 
      txtBalance.Clear(); 
      txtAge.Clear(); 
      txtAccountID.Focus(); 


     } 

     private void cboAccount_SelectedIndexChanged(object sender, EventArgs e) 
     { 

      txtNameTab2.Text = cboAccount.SelectedItem.ToString(); 



     } 

Antwort

0

Sie wollen eine List<BankAccount> haben jede der Personen zu speichern

Also in Ihrem Haupt-Form haben so etwas wie dieses

Private List<BankAccount> account = new List<BankAccount>() 

würde ich Ändere wahrscheinlich auch die Methoden, um Informationen zu Eigenschaften zu bekommen, da sie die Informationen passender darstellen.

//construct 
public BankAccount() 
{ 
} 

public BankAccount(string anID, string aName, int anAge, double aBalance) 
{ 
    AccountID = anID; 
    CustomerName = aName; 
    CustomerAge = anAge; 
    if (abalance == 0) 
    { 
     Balance = DEFAULT_BALANCE; 
    } 
    else { 
     Balance = aBalance; 
    } 
} 

private string _CustomerName; 
public string CustomerName 
{ 
    get { 
    retrun _CustomerName; 
    } 
    set { 
    _CustomerName = value; 
    } 

private string _AccountID; 
public string AccountID 
{ 
    get { 
    retrun _AccountID; 
    } 
    set { 
    _AccountID= value; 
    } 

private string _CustomerAge; 
public string CustomerAge 
{ 
    get { 
    retrun _CustomerAge; 
    } 
    set { 
    _CustomerAge= value; 
    } 

private string _Balance; 
public string Balance 
{ 
    get { 
    retrun _Balance; 
    } 
    set { 
    _Balance= value; 
    } 

Der Grund, warum ich Eigenschaften tun würde, ist, dass das ist im Grunde, was Sie mit Ihren Methoden tun, aber Sie müssen zusätzliche Methoden erstellen zu setzen und sie zu erhalten, wo diese in das Eigentum gebaut wird.

In der Hauptform

private void btnAddAccount_Click(object sender, EventArgs e) 
{ 
    BankAccount aBankAccount = new BankAccount(txtAccountID.Text, txtName.Text, 
     int.Parse(txtAge.Text), double.Parse(txtBalance.Text)); 

    account.Add(aBankAccount); 
    AddToComboBox(); 
    ClearText(); 
} 

private void cboAccount_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    txtNameTab2.Text = account[cboAccount.SelectedIndex].CustomerName; 
    txtAgeTab2.Text = account[cboAccount.SelectedIndex].CustomerAge; 
    txtIDTab2.Text = account[cboAccount.SelectedIndex].AccountID; 
    txtBalanceTab2.Text = account[cboAccount.SelectedIndex].Balance; 
} 

Es ist entweder ausgewählter Index oder selectedIndecies mich jetzt die Spitze von meinem Kopf nicht mehr erinnern wird.

+1

aus irgendeinem Grund, wenn ich "txtNameTab2.Text = account (cboAccount.SelectedIndex) .CustomerName;" account ist rot unterstrichen und besagt, dass das Konto im aktuellen Kontext nicht vorhanden ist –

+0

Probieren Sie 'txtNameTab2.Text = account [cboAccount.SelectedIndex] .CustomerName;' aus und stellen Sie sicher, dass Sie 'Private List account = new List hinzugefügt haben(); zu deiner Klasse. – MusiGenesis

+0

Entschuldigung, dass ich zwischen VB.NET und C# hin und her geblättert habe und manchmal bekomme ich die Syntax ein wenig ab. Es sollte [] sein, um den angegebenen Index anzugeben. Ich habe meine Antwort aktualisiert, um das zu reflektieren. – CBRRacer

1

Da Sie angegeben haben, dass dies Hausaufgaben sind, werde ich versuchen, Sie zu führen, anstatt den Code zu geben.

Sie müssen folgende Eigenschaften von ComboBox untersuchen:

  1. ValueMember
  2. DisplayMember
  3. DataSource
0

Sie dies tun können, sehr einfach. Zuerst müssen Sie ToString() in Ihrer BankAccount Klasse außer Kraft zu setzen, die Sie durch das Hinzufügen dieser Methode der Klasse tun können:

public override string ToString() { 
    return self.CustomerName; 
} 

dann die BankAccount Objekte als BankAccount Objekte hinzufügen (statt ihre GetName() Wert als der Zugabe string):

private void AddToComboBox() 
{ 
    cboAccount.Items.Clear(); 
    foreach (BankAccount person in account) 
    { 
     //cboAccount.Items.Add(person.GetName()); 
     cboAccount.Items.Add(person); 
    } 
} 

Nun wird cboAccount.SelectedItem auf ein Objekt vom Typ beziehen BankAccount, und Sie können direkt den Rest seiner Eigenschaften Zugriff nach Bedarf. Ein ComboBox verwendet die ToString()-Methode aller Objekte in seiner Items-Auflistung, um zu bestimmen, welcher Text für das Objekt in dem Feld angezeigt werden soll.

Verwandte Themen