0

フォームに2つのリストボックスがあり、これら2つのボックスの間にボタンがあります。最初のボックスでデータベースからいくつかのデータをバインドし、このリストボックスからアイテムを選択する必要があり、選択したアイテムを2番目のリストボックスに表示する必要があります。これは、ボタンをクリックしたときに発生するはずです。次のコードを使用しました。ハッシュテーブルを使用しました。

private void btnCATAdd_Click(object sender, EventArgs e)
{
    Hashtable ht = new Hashtable();
    ht.Add(lbCATallSubcat.SelectedValue.ToString(),
                                    lbCATallSubcat.Text.ToString());
    int i = 0;
    foreach (string ent in ht.Values)
    {
       string[] name = new string[lbCATallSubcat.Items.Count];
       for (i = 0; i < lbCATallSubcat.SelectedItems.Count; i++)
       {
           name[i] = lbCATallSubcat.Text;
           this.lbCATSelectedSubcat.Items.Add(name[i]);
       }
       lbCATSelectedSubcat.DisplayMember = ht.Values.ToString();
       lbCATSelectedSubcat.ValueMember = ht.Keys.ToString();
    }
}

最初のリストボックスで単一の項目のみを選択した場合は正常に機能しますが、最初のリストボックスから複数の項目を選択した場合は表示できません

4

3 に答える 3

0

ループを使用して、選択したすべての値をハッシュテーブルに追加します

private void btnCATAdd_Click(object sender, EventArgs e)
{
    Hashtable ht = new Hashtable();
     for(int i=0;i<lbCATallSubcat.Items.Count;i++)
      {
         if(ht.items[i].Selected)
           {
             ht.Add(lbCATallSubcat.Items[i].Value.ToString(),
                                    lbCATallSubcat.Items[i].Text.ToString());
           }
       }

      i = 0;
    foreach (string ent in ht.Values)
    {
       string[] name = new string[lbCATallSubcat.Items.Count];
       for (i = 0; i < lbCATallSubcat.SelectedItems.Count; i++)
       {
           name[i] = lbCATallSubcat.Text;
           this.lbCATSelectedSubcat.Items.Add(name[i]);
       }
       lbCATSelectedSubcat.DisplayMember = ht.Values.ToString();
       lbCATSelectedSubcat.ValueMember = ht.Keys.ToString();
    }
}
于 2012-09-11T11:18:10.307 に答える
0

SelectedItems代わりに、そのリストボックスのプロパティを使用する必要がありますSelectedValue。現在、ハッシュテーブルには1つの要素しか含まれていません。

http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selecteditems.aspxを参照してください

于 2012-09-11T11:22:00.383 に答える
0

ハッシュテーブルが必要ですか?を使用LINQすると、次のようなことができます。

public ObjHoldingData
{
     public Display { get; set; }
     public Value { get; set; }
}

public class Form
{
     Form()
     {
           var dataList = new List<ObjHoldingData>();
           //TODO: Fill list with all the data you pulled

           Listbox1.Datasource = dataList;
           Listbox1.DisplayMember = "Display";
           Listbox1.ValueMember = "Value";
     }

     protected void ButtonClick()
     {
          Listbox2.Datasource = Listbox1.SelectedItems.Cast<ObjHoldingData>().ToList();
          Listbox2.DisplayMember = "Display";
          Listbox2.ValueMember = "Value";               
     }
}

それでも必要な場合Hashtableは、ボタンの開始時にこれを行うことができます。

var ht = new Hashtable(ListBox1.SelectedItems.Cast<ObjHoldingData>().ToDictionary(o => o.Display, o => o.Value));
于 2012-09-11T15:55:33.883 に答える