2017-04-22 30 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

相關問題