2017-04-22 56 views
1

我目前正在创建一个winform程序,账户持有人可以购买特定的产品/服务。如何从组合框的文本框中显示班级中的所有值

目前我遇到的问题是,当我在组合框中选择一个账户持有人姓名时,所有账户持有人的详细信息应该显示在多行文本框中,但是到目前为止所有即时消息都是账户持有人的姓名。

下面是相关代码...

public Form1() 
    { 
     InitializeComponent(); 

     mAccHolder[0] = new Customer("Rich", "Bronze Account", 11); 
     mAccHolder[1] = new Customer("Patrick", "Silver Account", 21); 
     mAccHolder[2] = new Customer("Steve", "Gold Account", 12); 
     mAccHolder[3] = new Customer("Kevin", "Platinum Account", 25); 

     foreach(Customer r in mAccHolder) 
     { 
      comboBox1.Items.Add(r.GetName()); 
     } 
    } 

和连接组合框和文本框在一起的代码...

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

      if (comboBox1.SelectedIndex == -1) 
      { 
       cstTxtBox.Text = string.Empty; 
      } 
      else 
      { 
       cstTxtBox.Text = comboBox1.SelectedItem.ToString(); 
      } 
+0

查找'字符串concatenation'。 –

+0

您需要发布GetName()。它看起来像只在combobox1中添加帐户名称。 – anserk

回答

1

您只获取帐户持有人的姓名,因为这是您给组合框的全部内容。它不知道任何关于Customer。它只知道它提供了一个字符串值,这就是全部。你可以通过它的名字,这很好,但你需要打印与该组合框项目所代表的信息相对应的信息。你可以通过使用索引来做到这一点。由于我们知道它们是按顺序提供给组合框的,因此索引将匹配。但是,除非您覆盖ToString,否则您只需获取对象名称,例如“Customer.Object []”。

我一起为你举例。

private Customer[] customers = new Customer[3]; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     customers[0] = new Customer("Bob", "Bronze", 22); 
     customers[1] = new Customer("Jane", "Silver", 32); 
     customers[2] = new Customer("Jordan", "Gold", 26); 

     foreach(var cust in customers) 
     { 
      comboBox1.Items.Add(cust.Name); 
     } 
    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     textBox1.Text = customers[comboBox1.SelectedIndex].ToString(); 
    } 

另外,在你的'客户'类中,你可能想重写“ToString()”来使这个更好。

public override string ToString() 
    { 
     return Name + "\r\n" + Membership + "\r\n" + Age; 
    } 
+0

这工作完美,谢谢! – TheBiz

+0

没问题,很高兴帮助! – Toskr

0

可以使用的foreach,

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (comboBox1.SelectedIndex == -1) 
    { 
     cstTxtBox.Text = string.Empty; 
    } 
    else 
    { 
     foreach (var item in comboBox1.Items) 
     { 
      cstTxtBox.Text = cstTxtBox.Text + item.ToString(); 
     }      
    } 
} 
+0

我收到'item'和'ComboBox'的错误。它说,foreach语句不能用于组合框 – TheBiz

+1

再试一次,我编辑。 –

1

使用您的示例与“客户”对象的数组,当组合框的选定值更改时,您需要获取se从数组mAccHolder中挑选“客户”对象。一旦你有这个客户,你可以单独输出“客户”值到文本框,或者你可以为“客户”制作一个“ToString”方法,将客户信息输出到你的规范中,这就是下面的代码。

以下对当前代码的更改看起来像描述的那样工作。我向组合框添加了一个空白值,以便用户可以取消选择当前选定的任何客户。 “GetCustomer”方法只需遍历数组mAccHolder即可在组合框中获取选定的客户。希望这可以帮助。

客户类

class Customer { 
    public string Name { get; set; } 
    public string AccountType { get; set; } 
    public int ID { get; set; } 

    public Customer(string inName, string actType, int inID) { 
    Name = inName; 
    AccountType = actType; 
    ID = inID; 
    } 

    public string GetName() { 
    return Name; 
    } 

    public override string ToString() { 
    return "Name: " + Name + " AccountType: " + AccountType + " ID: " + ID; 
    } 
} 

更新代码,以使用上述客户类。

Customer[] mAccHolder = new Customer[10]; 

public Form1() { 
    InitializeComponent(); 
} 

private void Form1_Load(object sender, EventArgs e) { 
    mAccHolder[0] = new Customer("Rich", "Bronze Account", 11); 
    mAccHolder[1] = new Customer("Patrick", "Silver Account", 21); 
    mAccHolder[2] = new Customer("Steve", "Gold Account", 12); 
    mAccHolder[3] = new Customer("Kevin", "Platinum Account", 25); 
    comboBox1.Items.Add(""); // <- add a blank selection so the user can select NO customer 
    foreach (Customer r in mAccHolder) { 
    comboBox1.Items.Add(r.GetName()); 
    } 
} 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { 
    if (comboBox1.SelectedIndex == -1) { 
    cstTxtBox.Text = string.Empty; 
    } else { 
    if (comboBox1.SelectedItem.ToString() != "") { 
     Customer selectedCustomer = GetCustomer(comboBox1.SelectedItem.ToString()); 
     if (selectedCustomer != null) 
     cstTxtBox.Text = selectedCustomer.ToString(); 
     else 
     cstTxtBox.Text = "Customer not found!"; 
    } 
    else { 
     cstTxtBox.Text = "No Customer selected"; 
    } 
    } 
} 

private Customer GetCustomer(string targetName) { 
    foreach (Customer curCustomer in mAccHolder) { 
    if (curCustomer.Name.Equals(targetName)) { 
     return curCustomer; 
    } 
    } 
    return null; 
} 
0

轻松添加直接客户组合框。通过这种方式,您可以随时随地使用它。喜欢这个。

public Form1() 
    { 
     InitializeComponent(); 

     mAccHolder[0] = new Customer("Rich", "Bronze Account", 11); 
     mAccHolder[1] = new Customer("Patrick", "Silver Account", 21); 
     mAccHolder[2] = new Customer("Steve", "Gold Account", 12); 
     mAccHolder[3] = new Customer("Kevin", "Platinum Account", 25); 

     foreach(Customer r in mAccHolder) 
     { 
      ComboboxItem item = new ComboboxItem(); 
      item.Text = r.GetName(); 
      item.Value = r; 

      comboBox1.Items.Add(item); 

     } 
    } 

并在您想要使用的客户...

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      if (comboBox1.SelectedIndex == -1) 
      { 
       cstTxtBox.Text = string.Empty; 
      } 
      else 
      { 
       Customer c=(Customer) comboBox1.SelectedValue; 
       cstTxtBox.Text = c.whatyouwant.... 
      } 
+0

Comboboxitem不被识别!说在当前的情况下它不存在 – TheBiz

相关问题