web-dev-qa-db-ja.com

C#を使用して、コンボボックスで選択した項目を自分の文字列と一致するように設定する方法を教えてください。

"test1"という文字列があり、私のコンボボックスにはtest1test2、およびtest3が含まれています。選択した項目を "test1"に設定するにはどうすればいいですか?つまり、どのようにして自分の文字列をいずれかのcomboBox項目に一致させることができますか?

私は以下の行を考えていましたが、これはうまくいきません。

comboBox1.SelectedText = "test1"; 
176
May D

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

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

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

ComboBox1.Text = "test1";

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

201
Andrew Kennan

あなたのコンボボックスがデータバインドされていないと仮定すると、あなたはあなたのフォーム上の "items"コレクションの中でオブジェクトのインデックスを見つけ、それから "selectedindex"プロパティを適切なインデックスに設定する必要があるでしょう。

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

項目が見つからない場合、IndexOf関数は引数例外をスローすることがあるので注意してください。

47
Spence

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

comboBox1.SelectedItem = "test1";
35

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

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;
    }
}
10
gabore

SelectedTextは、文書化されているように ここで説明されているように(== --- ==)実際のテキストを文字列エディタで取得または設定します 。次のように設定すると、これは避けられません。

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

つかいます:

comboBox1.SelectedItem = "test1";

または

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
7
Brian Rudolph

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

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);
7
dave
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Windowsフォームでこれを試してください。

6
Muhammad Sohail
comboBox1.SelectedItem.Text = "test1";
5
Ben

Test1、test2、test3がcomboBox1コレクションに属しているとすると、ステートメントは機能します。

comboBox1.SelectedIndex = 0; 
4
ihcarp

この解決策は、 MSDN に基づいています。

  • 文字列の正確なorPARTを見つけて設定します。

    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;
    }
    

私が手助けしてくれたらいいのに!

4
Roman Polen.

データベースから入力された1つのDataTableで私のComboBoxを埋めました。それから私はDisplayMemberとValueMemberを設定しました。そして私はこのコードを使って選択した項目を設定します。

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

私はKeyValuePairをComboBoxデータバインドに使用していて、で項目を検索したいので、これは私の場合にはうまくいきました。

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");
1
Amit Bhagat
  • コンボボックス内のListItemを列挙する
  • 同等のものを取得listindex setコンボボックス
  • Listindexを見つかったものに設定します。

しかし、私がそのようなコードをコードレビューアとして見れば、すべてのメソッドアルゴリズムを再考することをお勧めします。

1
user53378

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

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

それが役に立てば幸い。

1
Megacan
_cmbTemplates.SelectedText = "test1"

または多分

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

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

0
user3599362

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

        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
Monzur

これは私のために働きます.....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
0
Jaydeep Karena
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

あなたの場合はあなたが使用することができます

DropDownList.Items.FindByText("Text");
0
user874163
combo.Items.FindByValue("1").Selected = true;
0
Anderson

(MyObjectのリストを含む)コンボボックスで(MyObject型の)mySecondObjectを見つけて、次の項目を選択します。

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