-1

私がこのアイテムを持っているとしましょう:

        comboBox.Items.Add("Access"); // make it equal to 31
        comboBox.Items.Add("Create"); // make it equal to 34
        comboBox.Items.Add("Delete"); // make it equal to 36
        comboBox.Items.Add("Modify"); // make it equal to 38

今、私は電話します

comboBox.SelectedIndex = 34; // want to "Create" item has been chosen

それを行う最も簡単な方法は何ですか?

4

5 に答える 5

1

残念ながら、winforms にはListItemASP.NET のようなクラスがないため、独自のクラスを作成する必要があります。

public class cbxItem
{
public string text {get;set;}
public int id {get;set;}

 public override string ToString() 
 { 
      return text;
 }
// you need this override, else your combobox items are gonna look like 
// "Winforms.Form1 + cbxItem"
}

次に、次のようにアイテムをコンボボックスに追加します。

cbxItem item = new cbxItem();
item.text = "Access";
item.id = 31;    
comboBox.Items.Add(item); 

「id」または「value」を取得するには、またはそれを呼び出す方法は次のとおりです。

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       var cbxMember = comboBox1.Items[comboBox1.SelectedIndex] as cbxItem;

      if (cbxMember != null) // safety check
       {
       var value = cbxMember.id; 
       }
    }
于 2012-10-03T15:21:24.523 に答える
1

それは、データをどのように管理するかによって大きく異なります。

プログラムの過程で項目が変更されない場合は、単に辞書をマッピング テーブルとして使用できます。

comboBox.Items.Add("Access"); // make it equal to 31
comboBox.Items.Add("Create"); // make it equal to 34
comboBox.Items.Add("Delete"); // make it equal to 36
comboBox.Items.Add("Modify"); // make it equal to 38

Dictionary<int, int> mapTable = new Dictionary<int, int>();
mapTable.Add(31, 0);
mapTable.Add(34, 1);
mapTable.Add(36, 2);
mapTable.Add(38, 3);

次に、単に次を使用します。

comboBox.SelectedIndex = mapTable[34];

抽象化を向上させるために、このロジックを ComboBox から継承するクラスに配置することもできます。

于 2012-10-03T15:21:52.233 に答える
0
comboBox.Items.Add(new WorkItem { Key = 31, Value = "Access" });
comboBox.Items.Add(new WorkItem { Key = 34, Value = "Create" });
comboBox.Items.Add(new WorkItem { Key = 36, Value = "Delete" });
comboBox.Items.Add(new WorkItem { Key = 38, Value = "Modify" }); 
selectItemByKey(34);

このメソッドを追加する必要があります:

   private void selectItemByKey(int key)
   {
        foreach (WorkItem item in comboBox.Items)
        {
            if (item.Key.Equals(key))
                comboBox.SelectedItem = item;
        }
   }`

そして、このようなクラス:

public class WorkItem
{
    public int Key { get; set; }
    public string Value { get; set; }

    public WorkItem()
    {
    }

    public override string ToString()
    {
        return Value;
    }
}
于 2012-10-03T16:07:50.227 に答える
0

SelectedIndexの代わりにSelectedValueを使用します。インデックスは単なるカウント (0,1,2,3...) です。値を指定できます。

于 2012-10-03T15:20:27.827 に答える
0

必要なことを行うには、単純な文字列よりも複雑なものを追加する必要があります。int と関連する文字列だけが必要な場合は、KeyValuePair を使用できますが、任意のカスタム オブジェクトが機能します。次に、コンボ ボックスが正しく表示されるように、コンボ ボックスに DisplayMember と ValueMember を設定する必要があります。ああ、SelectedIndex の代わりに SelectedValue または SelectedMember を使用してください。

これがあなたの追加です:

comboBox.Items.Add(new KeyValuePair<int, string>(){ Key = 34, Value = "Access"});

ええ、カスタム オブジェクトを使用すると、より簡単なステートメントになりますが、概念は同じです。

于 2012-10-03T15:29:49.320 に答える