2017-02-02 3 views
0

は、誰かがアイテムをこのように定義されたとき、私はコンボボックスにプログラム的に項目を選択することができる方法を説明してもらえますボックスは、このような実行時にアイテムが取り込まれます:どのようにプログラム的にコンボボックス内の項目を選択するには、値のペアは

myCombo.Items.Add(new ComboboxItem(“<key>“, “<text_to_display>”)); 

私はプログラム的にキーに基づいて項目を選択する必要がありますが、私はここでの提案を使用することはできません:私はのようにデータ項目の予知を持っていないので、Set the selecteditem of a combobox based on key,value pair.をComboBoxはpopulatを取得します実行時にed。誰かが助けてくれますか?どうもありがとう。

EDIT - これはwinformsアプリケーションです。

+0

私はなぜあなたがそのクラスを全く使用しているのか尋ねる必要があります。文字列を使用するよりもメリットがあるようではなく、(現在の問題のような)いくつかのことがはるかに複雑になります。 – Abion47

+0

これはどのような用途ですか?私はwinforms wpfまたはwebを意味しますか? –

+0

まあまあ、私はまだまだC#の方が新しく、実装方法はわかりません。 3文字のコードとテキストの説明としてキーを持つ項目を追加するより良い方法を提案してください。ユーザーが特定のXMLファイルをアップロードすると、XMLデータから3文字のコードが抽出され、コンボボックス内の各項目を事前に選択する必要があります。どうもありがとう。 – user2430797

答えて

1

この

comboBox1.Items.Add(new ComboboxItem("a", "a")); 
      comboBox1.Items.Add(new ComboboxItem("b", "b")); 
      comboBox1.Items.Add(new ComboboxItem("c", "c")); 
      comboBox1.Items.Add(new ComboboxItem("d", "d")); 

      var key = "c"; 

      foreach (var item in comboBox1.Items) 
      { 
       var comboItem = (ComboboxItem) item; 
       if (comboItem.Key.Equals(key)) 
        comboBox1.SelectedItem = comboItem; 
      } 

のようなものを試してみて、私はただのWinFormsプロジェクトを作ってきた、それが働きました。コンボボックスに「c」が選択された値として表示されました

linqも使用できます。これは

public void SelectItem(string key) 
     { 
      var comboItem = comboBox1.Items 
       .Cast<ComboboxItem>() 
       .FirstOrDefault(item => item.Key.Equals(key)); 
      if (comboItem == null) 
      { 
       //do whatever you want 
      } 
      else 
      { 
       comboBox1.SelectedItem = comboItem; 
      } 
     } 

あなたの項目を選択するための方法であることができ、あなたのコード、本当に再発明ホイールを有する限り問題ではない一つのことを見てみると、それは

+0

ありがとうtaquion、私すぐに仕事に出かけるつもりです、私がそこに着くとすぐにあなたの提案を試みます。どうもありがとう。 – user2430797

+0

仕事を完璧にしますか?ありがとう。 – user2430797

1

に役立ちます願っています。 ComboboxItemクラスはDictionaryのように疑わしく見えるので、このクラスをComboboxItemクラスで再作成する必要はないようです。

もう一つの問題は...

あなたのコメントである私はプログラム的にキーに基づいて項目を選択する必要がありますが、私はここでの提案を使用することはできません:キー、値のペアに基づいて コンボボックスのSelectedItemのを設定します。私はComboBoxが実行時に読み込まれるように、データ項目の先読みがありません。

これが当てはまる場合、どのように選択すればよいのでしょうか?

Dictionary,ComboBox,TextboxおよびButtonのコードを使用しています。 Dictionaryにデータが入力され、ComboBoxのDataSourceに設定されます。テキストのみがComboBoxに表示されます。フォームのTextBoxは、ユーザがButtonがクリックされたときにComboBoxの選択した値を変更する値を入力できるようにするために使用されます。そのキーがDictionaryに存在しない場合は、インデックスが見つからなかったことを示すメッセージが表示されます。

あなたはあなたが探しているものを正確に知らないと言うので、私はあなたがどのように適切なインデックスを選ぶと思うか不思議です。これが意味を持つことを願っています。

Dictionary<int, string> comboBoxData = new Dictionary<int, string>(); 
public Form1() { 

    InitializeComponent(); 
    comboBoxData = GetDataDictionary(); 
    comboBox1.DataSource = new BindingSource(comboBoxData, null); 
    comboBox1.DisplayMember = "Value"; 
    comboBox1.ValueMember = "Key"; 
} 

private void SetSelectedIndex(int indexToSelect) { 
    if (comboBoxData.Keys.Contains(indexToSelect)) { 
    comboBox1.SelectedIndex = indexToSelect; 
    } 
    else { 
    MessageBox.Show("The supplied key does not exist!"); 
    } 
} 

private Dictionary<int, string> GetDataDictionary() { 
    Dictionary<int, string> dictionary = new Dictionary<int, string>(); 
    for (int i = 0; i < 15; i++) { 
    dictionary.Add(i, "Item name " + i); 
    } 
    return dictionary; 
} 

private void buttonSelectIndex_Click(object sender, EventArgs e) { 
    if (tbIndexToSelect.Text != "") { 
    int indexToSelect = comboBox1.SelectedIndex; 
    if (int.TryParse(tbIndexToSelect.Text, out indexToSelect)) { 
     SetSelectedIndex(indexToSelect); 
    } 
    } 
} 
+0

お勧めのソリューションをありがとうございます。データは、XMLのペイロードとして受信インタフェースから供給されます。ペイロードを受け取ると、ペイロードからコンボボックスのすべての値を外挿します。 – user2430797

関連する問題