2017-04-22 12 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()を投稿する必要があります。あなたはコンボボックス1にアカウント名を追加するだけです。 – 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

「アイテム」と「コンボボックス」の両方にエラーが表示されます。これは、foreachステートメントをコンボボックスで使用することはできないと言います。 – TheBiz

+1

これをもう一度試してみてください。 –

1

"Customer"オブジェクトの配列でサンプルを使用すると、コンボボックスの選択された値が変更されたときに、se配列mAccHolderから「Customer」オブジェクトを選択しました。この顧客がいれば、 "顧客"の値をテキストボックスに個別に出力するか、 "顧客"がお客様の仕様に顧客情報を出力する "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

関連する問題