从组合框选择中显示多条信息?

时间:2012-04-04 20:06:52

标签: c# combobox textbox selectedindex

我正在为学校制定计划。它是一个包含两个选项卡的C#GUI。

在第一个标签上,用户可以输入有关新银行帐户的信息,例如:姓名,帐户ID,年龄和帐户余额。还有一个按钮,用户的名字放在第二个选项卡上的组合框中。因此,第二个选项卡包含组合框和一些文本框:name,id,age和balance。

我面临的问题是,当我从组合框中选择一个名称时,它不会填充所有文本框。我知道文本框的名称,因为我从组合框中拉出它。但我无法弄清楚如何填充其他文本框:id,age和balance。这是我到目前为止所拥有的......

  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();



        }

3 个答案:

答案 0 :(得分:1)

既然你说这是家庭作业,我会尽力指导你,而不是给你代码。

您需要检查ComboBox的以下属性:

  
      
  1. ValueMember
  2.   
  3. DisplayMember
  4.   
  5. DataSource
  6.   

答案 1 :(得分:0)

您希望List<BankAccount>存储每个人

所以在你的主要表单中做这样的事情

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

我也可能会更改方法以获取属性信息,因为它们更适合显示信息。

  //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;
  }

我会做属性的原因是,这基本上就是你用你的方法做的事情,但你必须创建其他方法来设置并获取它们在属性中构建的位置。

在主窗体中

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;
}

这是选择的索引或者选择的内容,我现在不记得了。

答案 2 :(得分:0)

你可以非常简单地做到这一点。首先,您需要覆盖ToString()类中的BankAccount,您可以通过将此方法添加到类中来执行此操作:

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

然后将BankAccount个对象添加为BankAccount个对象(而不是将其GetName()值添加为字符串):

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

现在,cboAccount.SelectedItem将引用类型为BankAccount的对象,您可以根据需要直接访问其余属性。 ComboBox使用其ToString()集合中任何对象的Items方法来确定框中该对象要显示的文本。