ComboBox içindeki seçili öğeyi C # kullanarak dizemle eşleşecek şekilde nasıl ayarlarım?


197

Ben bir dize "test1" var ve benim combobox içeren test1, test2vetest3 . Seçilen öğeyi "test1" olarak nasıl ayarlayabilirim? Yani, dizemi comboBox öğelerinden biriyle nasıl eşleştirebilirim?

Aşağıdaki çizgiyi düşünüyordum, ama bu işe yaramıyor.

comboBox1.SelectedText = "test1"; 

nasıl çalışmıyor? Bu kod satırı çalıştığında ne olur?
Kate Gregory

@KateGregory sadece "test1" dizesini mevcut metne birleştirir
16:14

U öğenin değerini bilmek için bir yol varsa kullanabilirsiniz: comboBox1.SelectedValue = Value_of_your_string;
César León

SelectedText"Seçili" metni test1 olarak değiştirir. "Seçim" (işaretli metin) yapılmazsa, metin düzeltme işareti konumuna eklenir.
AaA

Yanıtlar:


278

Bu hile yapmalı:

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

Bir değişkene geçici olarak kaydedebileceğiniz ve aradığınız değeri bulup bulamadığınızı test etmek için kullanabileceğiniz bir dönüş değeriniz olduğunda bana daha iyi bir cevap gibi görünüyor.
Áxel Costas Pena

combox1 içinde birden fazla "test1" değeri varsa
thoitbk

@thoitbk - msdn.microsoft.com/en-us/library/… adresindeki MSDN'ye göre , FindStringExact() "Açılan kutuda belirtilen dizeyle eşleşen ilk öğeyi bulur."
dub stylee

207

Metin özelliğini denediniz mi? Benim için çalışıyor.

ComboBox1.Text = "test1";

SelectedText özelliği, birleşik giriş kutusunun metin kutusu bölümündeki düzenlenebilir metnin seçilen kısmı içindir.


7
Şüphesiz, listeden ilgili öğeyi seçmek yerine metni ComboBox'ın düzenlenebilir alanına ayarlar mı? Liste öğeleri koleksiyonu sadece dizeleri yerine nesneleri içeriyorsa, o zaman bu uygun ListItem nesnesini seçeceğini, bunun yerine sadece ComboBox Metin özelliğini ayarlamak şüpheliyim?
TabbyCool

9
Kontrolün SelectedValue özelliğini ayarladı
Henryk

Güzel. Yazı tipi boyutu, ağırlık ve aile açılır menüleri için güzel çalışır. Sınıflar arasında yayın yok veya dönüşüm yok. Soooo çok daha kolay!
Lance Cleveland

3
Her ihtimale karşı: Bu parametre yalnızca birleşik giriş kutusu doldurulduktan sonra ayarlanmalıdır.
Antoine Rodriguez

12
Açılan açılan kutum DropDownList ve .Text = "bazı metin" çalışmıyor. Bu çözüm benim için iyi çalıştı: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")
Mayank

48

Combobox'ınızın databound olmadığı varsayılarak, formunuzdaki "items" koleksiyonunda nesnenin dizinini bulmanız ve ardından "selectedindex" özelliğini uygun dizine ayarlamanız gerekir.

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

Öğe bulunmazsa, IndexOf işlevinin bir argüman istisnası atabileceğini unutmayın.


1
SelectedINDEX'in SelectedITEM olmadığını hatırlayın ... Ve derleyici şikayet etmiyor, sadece birleşik giriş değeri ayarlayamıyorsunuz
Rob

Herhangi bir istisna atmayan mantıksal hataları sevmiyor musun, sadece işe yaramıyorlar ...
Spence

bu öğeyi seçiyor, ancak
birleşik giriş

39

ComboBox'ınızdaki öğeler dizeyse, deneyebilirsiniz:

comboBox1.SelectedItem = "test1";


Günü kurtardım! Seçilen öğe türle eşleşmelidir - bu benim içindi! Öğe açık bir şekilde oradayken bile neden seçilen öğenin ayarlanmadığını başımı kaşıyordum - bir tür uyumsuzluğu olduğu ortaya çıktı!
Sudhanshu Mishra

Tamlık için, yukarıdaki bağlantıdan açıklama almak yararlıdır, özellikle de bu cevap @norbertB'den tercih edileni içeren diğer cevaplar tarafından önerilen eşleştirme kontrolünü gerçekleştirdiğinden: SelectedItem özelliğini bir nesneye ayarladığınızda, ComboBox bu nesneyi yapmaya çalışır listede seçili olanı seçin. Nesne listesinde bulunursa , o ComboBox düzenleme kısmında görüntülenir ve Selectedındex mülkiyet gelen endeks olarak ayarlanır. Nesne listede yoksa, SelectedIndex özelliği geçerli değerinde kalır.
DanG

10

Benim için bu sadece çalıştı:

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

MOD: ve birleşik giriş kutusunda ayarlanmış öğeler olarak kendi nesneleriniz varsa, ComboBoxItem'i bunlardan biriyle değiştirin:

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

2
Bu benim için çalıştı, ancak ComboBox öğelerinizin aslında ComboBoxItems olduğuna dikkat etmelisiniz, çünkü diğer öğeleri de oraya koymak mümkündür.
Hibe

Bu WinRT 8.1'de harika çalıştı. Aslında üst foreach'ı dave gibi SelectItemByValue () çözümünde yazılan bir uzantısı yöntemi ile sarılmış ve gerçekten mükemmel bir çözüm oldu.
Speednet

9

SelectedText, açılan kutudaki seçili öğenin dize düzenleyicisindeki gerçek metni burada belgelendiği gibi almak veya ayarlamaktır . Aşağıdakileri ayarlarsanız bu düzenlenemez:

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

kullanın:

comboBox1.SelectedItem = "test1";

veya:

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

1
comboBox1.Items.IndexOf ... Öğeler boşsa NullReferenceException riskini alır.
Gary

9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Bunu Windows Form'da deneyin.


7

Bir uzantı yöntemi kullandım:

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

Sonra sadece yöntemi tüketin:

ddl.SelectItemByValue(value);

5
comboBox1.SelectedItem.Text = "test1";


4

Bu çözüm, yaptığım bazı değişikliklerle MSDN tabanlı .

  • Dizenin tam veya PARÇASINI bulur ve ayarlar.

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

Umarım yardımcı olmuşumdur!


3

Ben bir veritabanından doldurulmuş een DataTable ile ComboBox doldurdum. Sonra DisplayMember ve ValueMember ayarladım. Ve bu kodu seçilen öğeyi ayarlamak için kullanıyorum.

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

1

ComboBox içinde bu özelliğe sahip değilsiniz. SelectedItem veya SelectedIndex girdiniz. Birleşik giriş kutusunu doldurmak için kullandığınız nesneleriniz varsa SelectedItem kullanabilirsiniz.

Değilse, öğeleri (özellik Öğeleri) koleksiyonunu alabilir ve istediğiniz değeri alana kadar bunu tekrarlayabilir ve diğer özelliklerle kullanabilirsiniz.

Umarım yardımcı olur.


1
_cmbTemplates.SelectedText = "test1"

ya da belki

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

bu kodla, SelectedItem özelliğine bir bool atarsınız ... imho çalışmaz.
Frederik Gheysels

1
  • Combobox'ta ListItems numaralandır
  • Eşit olanlar almak listindex set combobox
  • Listindex'i bulunana ayarlayın.

Ama böyle bir kodu kod inceleyici olarak görürsem, tüm yöntem algoritmasını yeniden düşünmenizi tavsiye ederim.


2
Neden cevap olarak verdin?

1

ComboBox veri bağlama için KeyValuePair kullandım ve bu benim durumumda çalıştı bu yüzden değere göre öğe bulmak istedim :

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

1

Açılan kutuda (MyObjects listesini içeren) mySecondObject (MyObject türünde) öğesini bulun ve öğeyi seçin:

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

Durumunuz için kullanabilirsiniz

DropDownList.Items.FindByText("Text");

0
combo.Items.FindByValue("1").Selected = true;

3
"1" bulunmazsa bu da bir istisna riski taşır.
Gary

0

ComboBox öğesi bir üst öğeye sahip olana kadar ComboBox öğesinin tüm ayar yöntemleri, püf noktaları ve satır ayarları çalışmaz.


0

Değer Dizini döndürecek bir işlev oluşturduk

        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

bu benim için çalışıyor .....

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

1
Bu kod soruyu cevaplayabilse de, sorunun nasıl çözüleceğini açıklamak ve kodu örnek veya referans olarak sağlamak daha iyidir. Yalnızca kod yanıtları kafa karıştırıcı olabilir ve bağlamdan yoksun olabilir.
Robert Columbia

Tavsiye için teşekkürler!
Jaydeep Karena


-2

Lütfen şu şekilde deneyin, benim için çalışıyor:

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

SeçiliIndex öğesinin önce -1 olmadığını veya daha doğrusu> = 0 ve <.items.length olup olmadığını denetlemelisiniz.
Gary

-3

İşe yaramalı

Yourcomboboxname.setselecteditem("yourstring");

Ve veritabanı dizesini ayarlamak istiyorsanız bunu kullanın

Comboboxname.setselecteditem(ps.get string("databasestring"));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.