C#を使用して、comboBoxで選択したアイテムを文字列と一致するように設定するにはどうすればよいですか?


197

私は、文字列「TEST1」を持っていると私のコンボボックスが含まれているtest1test2test3。選択したアイテムを「test1」に設定するにはどうすればよいですか?つまり、自分の文字列をcomboBoxアイテムの1つに一致させるにはどうすればよいですか。

下の行を考えていましたが、これは機能しません。

comboBox1.SelectedText = "test1"; 

どのように機能しないのですか?このコード行を実行するとどうなりますか?
ケイトグレゴリー

@KateGregoryは、 "test1"文字列を既存のテキストに連結するだけです
solujic '29

あなたが使用できるアイテムの値を知る方法がある場合:comboBox1.SelectedValue = Value_of_your_string;
セザールレオン

SelectedText「選択」テキストをtest1に変更します。「選択」(マークされたテキスト)が作成されていない場合、テキストはキャレットの位置に挿入されます。
AaA

回答:


278

これでうまくいくはずです:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")

戻り値があるため、一時的に変数に保存し、それを使用して、探していた値が見つかったかどうかをテストできるため、私にはより良い答えのようです。
–ÁxelCostas Pena 2014

combox1に複数の「test1」値がある場合はどうなるか
thoitbk

@thoitbk -のMSDNによるとmsdn.microsoft.com/en-us/library/...、この方法は、FindStringExact() 「指定された文字列に一致するコンボボックス内の最初の項目を検索します。」
ダブスタイル

207

Textプロパティを試しましたか?わたしにはできる。

ComboBox1.Text = "test1";

SelectedTextプロパティは、コンボボックスのテキストボックス部分にある編集可能なテキストの選択された部分です。


7
リストから関連する項目を選択するのではなく、ComboBoxの編集可能な領域にテキストを設定するだけですか?リストアイテムのコレクションに文字列だけでなくオブジェクトが含まれている場合、適切なListItemオブジェクトが選択されるのではなく、ComboBoxのTextプロパティが設定されるだけでしょうか。
TabbyCool 2010年

9
コントロールのSelectedValueプロパティを設定します
Henryk

いいね。フォントサイズ、太さ、ファミリのプルダウンで美しく機能します。クラス間のキャストや変換はありません。すごく簡単!
ランスクリーブランド、

3
念のため:このパラメータは、コンボボックスに入力した後でのみ設定する必要があります。
アントワーヌロドリゲス

12
私のコンボボックスのドロップダウンスタイルはDropDownListで、.Text = "some text"が機能しません。このソリューションは私にとってはうまくいきました:Combox1.SelectedIndex = Combox1.FindStringExact( "test1")
Mayank

48

コンボボックスがデータバインドされていない場合、フォームの「items」コレクションでオブジェクトのインデックスを見つけ、「selectedindex」プロパティを適切なインデックスに設定する必要があります。

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

項目が見つからない場合、IndexOf関数はargumentexceptionをスローする可能性があることに注意してください。


1
SelectedITEMではなくSelectedINDEXを覚えておいてください...そしてコンパイラは文句を言わず、コンボボックスの値の設定に失敗するだけです
Rob

例外をスローしない論理エラーは好きではありません。それらは機能しません...
Spence

これは項目を選択していますが、コンボボックスのonChangeイベントを呼び出していません
mrid

39

ComboBoxの項目が文字列の場合、次のことを試すことができます。

comboBox1.SelectedItem = "test1";

18
いいえそうではありません: msdn.microsoft.com/en-us/library/...は
フレデリックGheysels

その日を救った!選択したアイテムはタイプと一致する必要があります-それは私にとってそれでした!選択されたアイテムが明らかにそこにあるのにセットされなかったのはなぜか頭を悩ませていました-タイプの不一致であることが判明しました!
Sudhanshu Mishra

完全性のために、上記のリンクからの説明があると便利です。特に、この回答は@norbertBからの優先回答を含む他の回答によって提案された一致チェックを実行するためです 。SelectedItem プロパティをオブジェクトに設定すると、ComboBoxはそのオブジェクトを作成しようとしますリストで現在選択されているもの。オブジェクトがリストにある場合は、ComboBoxの編集部分に表示され、SelectedIndexプロパティが対応するインデックスに設定されます。オブジェクトがリストに存在しない場合、SelectedIndexプロパティは現在の値のままになります。
DanG 2018年

10

私にとってこれはうまくいきました:

foreach (ComboBoxItem cbi in someComboBox.Items)
{
    if (cbi.Content as String == "sometextIntheComboBox")
    {
        someComboBox.SelectedItem = cbi;
        break;
    }
}

MOD:コンボボックスに設定されたアイテムとして独自のオブジェクトがある場合は、ComboBoxItemを次のようなオブジェクトのいずれかに置き換えます。

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}

2
これは私にとってはうまくいきましたが、ComboBoxの項目が実際にはComboBoxItemsであることに注意する必要があります。他の項目もそこに置くことができるからです。
2013

これはWinRT 8.1でうまく機能しました。私は実際、daveがSelectItemByValue()ソリューションで書いたような拡張メソッドでトップのforeachをラップしましたが、それは本当に完璧なソリューションでした。
Speednet、2015年

9

SelectedTextは、ここに記載されているように、コンボボックス内の選択されたアイテムの文字列エディターで実際のテキストを取得または設定します。以下を設定した場合、これは編集できなくなります。

comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

使用する:

comboBox1.SelectedItem = "test1";

または:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

1
comboBox1.Items.IndexOf ...は、Itemsが空の場合にNullReferenceExceptionの危険を冒します。
ゲイリー


7

私は拡張メソッドを使用しました:

public static void SelectItemByValue(this ComboBox cbo, string value)
{
    for(int i=0; i < cbo.Items.Count; i++)
    {
        var prop = cbo.Items[i].GetType().GetProperty(cbo.ValueMember);
        if (prop!=null && prop.GetValue(cbo.Items[i], null).ToString() == value)
        {
             cbo.SelectedIndex = i;
             break;
        }
    } 
}

次に、メソッドを使用します。

ddl.SelectItemByValue(value);



4

このソリューションは、私が行ったいくつかの変更を加えたMSDNに基づいています。

  • 文字列の正確またはPARTを見つけて設定します。

    private int lastMatch = 0;
    private void textBoxSearch_TextChanged(object sender, EventArgs e)
    {
        // Set our intial index variable to -1.
        int x = 0;
        string match = textBoxSearch.Text;
        // If the search string is empty set to begining of textBox
        if (textBoxSearch.Text.Length != 0)
        {
            bool found = true;
            while (found)
            {
                if (comboBoxSelect.Items.Count == x)
                {
                    comboBoxSelect.SelectedIndex = lastMatch;
                    found = false;
                }
                else
                {
                    comboBoxSelect.SelectedIndex = x;
                    match = comboBoxSelect.SelectedValue.ToString();
                    if (match.Contains(textBoxSearch.Text))
                    {
                        lastMatch = x;
                        found = false;
                    }
                    x++;
                }
            }
        }
        else
            comboBoxSelect.SelectedIndex = 0;
    }

助けてくれたらいいのに!


3

私のComboBoxには、データベースから入力された古いDataTableが入力されています。次に、DisplayMemberとValueMemberを設定しました。そして、このコードを使用して、選択した項目を設定します。

foreach (DataRowView Row in ComboBox1.Items)
{
    if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}

1

ComboBoxにそのプロパティはありません。SelectedItemまたはSelectedIndexがあります。コンボボックスの塗りつぶしに使用したオブジェクトがある場合は、SelectedItemを使用できます。

そうでない場合は、アイテムのコレクション(プロパティアイテム)を取得し、必要な値を取得して他のプロパティで使用するまでそれを繰り返します。

それが役に立てば幸い。


1
_cmbTemplates.SelectedText = "test1"

または多分

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");

このコードでは、SelectedItemプロパティにブール値を割り当てます... imhoは機能しません。
Frederik Gheysels、2009年

1
  • コンボボックスのリストアイテムを列挙する
  • 等しいものを取得するlistindexセットのコンボボックス
  • listindexを見つかったものに設定します。

しかし、そのようなコードをコードレビューアと見なした場合、すべてのメソッドアルゴリズムを再検討することをお勧めします。


2
なぜあなたはそれを答えとして提供したのですか?

1

ComboBoxデータバインドにKeyValuePairを使用し、値で項目を検索したいので、これは私の場合に機能しました:

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");

1

コンボボックス(MyObjectsのリストを含む)で(MyObjectタイプの)mySecondObjectを見つけ、アイテムを選択します。

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}

0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

あなたのケースではあなたが使うことができます

DropDownList.Items.FindByText("Text");


0

ComboBox項目に設定するすべてのメソッド、トリック、およびコード行は、ComboBoxに親があるまで機能しません。


0

値のインデックスを返す関数を作成しました

        public static int SelectByValue(ComboBox comboBox, string value)
        {
            int i = 0;
            for (i = 0; i <= comboBox.Items.Count - 1; i++)
            {
                DataRowView cb;
                cb = (DataRowView)comboBox.Items[i];
                if (cb.Row.ItemArray[0].ToString() == value)// Change the 0 index if your want to Select by Text as 1 Index
                {
                    return i;
                }
            }
            return -1;
        }

0

これは私のために働く.....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];

1
このコードは質問に答えることがありますが、問題を解決する方法を説明し、例または参照としてコードを提供することをお勧めします。コードのみの回答は混乱を招き、コンテキストが不足する可能性があります。
ロバートコロンビア

アドバイスありがとうございます!
Jaydeep Karena


-2

この方法を試してください、それは私のために働きます:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";

最初に、selectedIndexが-1ではないこと、またはより正確には> = 0および<.items.lengthであることを確認する必要があります。
ゲーリー、

-3

うまくいくはず

Yourcomboboxname.setselecteditem("yourstring");

そして、データベース文字列を設定したい場合は、これを使用してください

Comboboxname.setselecteditem(ps.get string("databasestring"));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.