C #을 사용하여 문자열과 일치하도록 comboBox에서 선택한 항목을 어떻게 설정합니까?


197

나는 문자열 "TEST1"가 내 콤보 상자 포함하고 test1, test2하고 test3. 선택한 항목을 "test1"로 설정하려면 어떻게합니까? 즉, 문자열을 comboBox 항목 중 하나와 일치시키는 방법은 무엇입니까?

아래 줄을 생각하고 있었지만 작동하지 않습니다.

comboBox1.SelectedText = "test1"; 

어떻게 작동하지 않습니까? 이 코드 줄이 실행될 때 어떻게됩니까?
Kate Gregory

@KateGregory "test1"문자열을 기존 텍스트에 연결합니다
solujic

항목 값을 알 수있는 방법이 있으면 다음을 사용할 수 있습니다. comboBox1.SelectedValue = Value_of_your_string;
César León

SelectedText"선택한"텍스트를 test1로 변경합니다. "선택"(표시된 텍스트)이 없으면 텍스트가 캐럿 위치에 삽입됩니다.
AaA

답변:


278

트릭을 수행해야합니다.

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

반환 값이있어 변수에 임시로 저장하고 원하는 값을 찾았는지 테스트하는 데 사용할 수 있기 때문에 더 나은 답변 인 것 같습니다.
Áxel Costas Pena

combox1에 둘 이상의 "test1"값이있는 경우
thoitbk

@thoitbk -에서 MSDN에 따르면 msdn.microsoft.com/en-us/library/... , 방법은 FindStringExact() "지정된 문자열과 일치하는 콤보 상자의 첫 번째 항목을 찾습니다."
dub stylee

207

Text 속성 을 사용해 보셨습니까 ? 그것은 나를 위해 작동합니다.

ComboBox1.Text = "test1";

SelectedText 속성은 콤보 상자의 텍스트 상자 부분에서 편집 가능한 텍스트의 선택된 부분에 대한 것입니다.


7
분명히 목록에서 관련 항목을 선택하지 않고 ComboBox의 편집 가능한 영역에 텍스트를 설정합니까? 목록 항목 컬렉션에 문자열이 아닌 객체가 포함되어 있으면 적절한 ListItem 객체를 선택하는 것이 아니라 ComboBox에서 Text 속성을 설정하는 것입니다.
TabbyCool

9
컨트롤의 SelectedValue 속성을 설정합니다
Henryk

좋은. 글꼴 크기, 무게 및 가족 풀다운에 아름답게 작동합니다. 클래스 간 캐스트 또는 변환이 없습니다. 훨씬 쉬워요!
랜스 클리블랜드

3
경우에 :이 매개 변수는 콤보 상자를 채운 후에 만 ​​설정해야합니다.
Antoine Rodriguez

12
내 콤보 상자 드롭 다운 스타일이 DropDownList이고 .Text = "일부 텍스트"가 작동하지 않습니다. 이 솔루션은 나를 위해 잘 작동했습니다 : Combox1.SelectedIndex = Combox1.FindStringExact ( "test1")
Mayank

48

콤보 박스가 데이터 바인딩되어 있지 않다고 가정하면 양식의 "항목"컬렉션에서 개체의 인덱스를 찾은 다음 "selectedindex"속성을 적절한 인덱스로 설정해야합니다.

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

항목을 찾을 수없는 경우 IndexOf 함수는 인수 예외를 발생시킬 수 있습니다.


1
SelectedINDEX가 SelectedITEM이 아니라는 것을 기억하십시오. 그리고 컴파일러는 불평하지 않고 콤보 박스 값을 설정하지 않습니다
Rob

예외를 발생시키지 않는 논리적 오류를 좋아하지 않으면 작동하지 않습니다 ...
Spence

이것은 항목을 선택하지만 콤보 박스에서 onChange 이벤트를 호출하지 않습니다
mrid

39

ComboBox의 항목이 문자열이면 다음을 시도해보십시오.

comboBox1.SelectedItem = "test1";


하루를 구했다! 선택한 항목이 유형과 일치해야합니다. 선택한 항목이 명확하게 설정되지 않은 이유에 대해 머리를 긁고있었습니다. 유형이 일치하지 않습니다.
Sudhanshu Mishra

완성도를 높이기 위해 위 링크에서 설명하는 것이 유용합니다. 특히이 답변은 @norbertB에서 선호하는 답변을 포함하여 다른 답변에서 제안한 일치 확인을 수행하기 때문에 유용 합니다. SelectedItem 속성을 객체로 설정하면 ComboBox가 해당 객체를 만들려고 시도합니다. 리스트에서 현재 선택된 것 객체가 list있으면 ComboBox의 편집 부분에
DanG

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이므로 다른 항목도 넣을 수 있으므로주의해야합니다.
Grant

이것은 WinRT 8.1에서 훌륭하게 작동했습니다. 필자는 dave가 SelectItemByValue () 솔루션에 쓴 것과 같은 확장 메소드에서 실제로 foreach를 감쌌으며 실제로 완벽한 솔루션이었습니다.
Speednet

9

SelectedText는 여기에 설명 된대로 콤보 박스에서 선택한 항목에 대한 문자열 편집기의 실제 텍스트를 가져 오거나 설정하는 입니다. 다음을 설정하면 편집 할 수 없습니다.

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

사용하다:

comboBox1.SelectedItem = "test1";

또는:

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

1
comboBox1.Items.IndexOf ...는 항목이 비어있는 경우 NullReferenceException을 발생시킵니다.
Gary


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

5
comboBox1.SelectedItem.Text = "test1";


4

이 솔루션은 MSDN 을 기반으로 내가 수정 한 것입니다.

  • 문자열의 정확한 부분 을 찾아서 설정합니다.

    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

데이터베이스에서 채워진 DataTable로 ComboBox를 채웠습니다. 그런 다음 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

1
  • 콤보 상자에서 ListItems 열거
  • 동등한 것을 얻으십시오 listindex set combobox
  • listindex를 찾은 것으로 설정하십시오.

그러나 코드 검토 자와 같은 코드를 보면 모든 방법 알고리즘을 재고하는 것이 좋습니다.


2
그렇다면 왜 대답으로 제공 했습니까?

1

ComboBox 데이터 바인딩에 KeyValuePair 를 사용 했으며 값으로 항목을 찾고 싶었습니다 .

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

1

콤보 상자 (MyObject 목록 포함)에서 mySecondObject (MyObject 유형)를 찾아서 항목을 선택하십시오.

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
combo.Items.FindByValue("1").Selected = true;

3
"1"을 찾지 못하면 예외가 발생할 위험도 있습니다.
게리

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
이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법을 설명하고 코드를 예제 또는 참조로 제공하는 것이 좋습니다. 코드 전용 답변은 혼란스럽고 컨텍스트가 부족할 수 있습니다.
Robert Columbia

충고 감사합니다!
Jaydeep Karena 2016 년


-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.