2009-07-16 5 views
5

'item3' dizgisi ve 'item1, item2, item3, item4' olan bir liste kutum var, bir dize içinde öğe ismim olduğunda liste kutusundaki item3'ü nasıl seçerim?C# Bir dizede değer adına sahip olduğumda liste kutusu öğesini nasıl seçerim?

Teşekkür

+0

kodunuzu gönderebilir miyim? – kemiller2002

+0

WPF kullanıyor musunuz? SelectedValue'un birkaç denetlemede R/W olmadığını biliyorum. Eğer öyleyse, WPF sorularını WPF olarak etiketlemeyi unutmayın. Değilse, beni görmezden gel;) –

cevap

14
int index = listBox1.FindString("item3"); 
// Determine if a valid index is returned. Select the item if it is valid. 
if (index != -1) 
    listBox1.SetSelected(index,true); 
+1

Ya da lb.SelectedIndex = lb.FindStringExact (fieldValue); –

+0

Bunların hiçbiri benim için çalışmaz, çünkü .SetSelected() işlevini kullanmıyorum ... SystemBox komutlarını System.Controls kullanıyorum ve farklı olduğunu fark ettim .. –

0

okuma/yazma SelectedValue değil midir?

+0

Denedim lstbox.selectedvalue = strItem; ama bu benim için işe yaramadı. –

+0

Bu WinForms veya WebForms mı? – Lazarus

4
listBox.FindStringExact("item3"); 

Bulunan ilk öğenin dizinini veya herhangi bir eşleşme bulunmazsa ListBox.NoMatches değerini döndürür.

sonra

1

ListBox.SetSelected yöntemi ile deneyin Bu Ürünü seçmek için

listBox.SetSelected(index, true); 

çağırabilir. Belki böyle

1

:

public bool SelectItem(ListBox listBox, string item) 
    { 
     bool contains = listBox.Items.Contains(item); 
     if (!contains) 
      return false; 
     listBox.SelectedItem = item; 
     return listBox.SelectedItems.Contains(item); 
    } 

Deney yöntemi: listbox için ValueMember ayarladıysanız

public void Test() 
    { 
     string item = "item1"; 
     if (!SelectItem(listBox, item)) 
     { 
      MessageBox.Show("Item not found."); 
     } 
    } 
+0

Daha iyi ileti "Öğe bulunamadı. " Ayrıca bir test yöntemi sağlamak için –

+0

+1. İyi programlama alışkanlığı. –

1

SelectedValue sadece çalışacaktır.

Ayrıca, ValueMember değerini ayarlamanıza rağmen, ListBox.Sorted = true ise, seçili Değer çalışmaz.

Kontrol dışarı Setting selected item in a ListBox without looping

benim yazı Bu yaklaşımlardan biri deneyebilirsiniz:

  1. lb.SelectedValue = fieldValue;

  2. lb.SelectedIndex = lb.FindStringExact(fieldValue);

  3. Bu, tüm süzer için genel bir yöntemdir. Uygulamanız, liste kutusuna bağlandığınıza bağlı olarak değişecektir. Benim durumumda DataTable. selectedValue işe yaramazsa

    private void SetSelectedIndex(ListBox lb, string value) 
    { 
        for (int i = 0; i < lb.Items.Count; i++) 
        { 
         DataRowView dr = lb.Items[i] as DataRowView; 
         if (dr["colName"].ToString() == value) 
         { 
          lb.SelectedIndices.Add(i); 
          break; 
         } 
        }  
    } 
    
+1

Bu, SO'da bir kızı ilk gördüğüm zaman. Görmek güzel. Ama yine de benim emrimlerim boşuna bir hata ile işaret etmek için çağırıyorlar. Cevabınız tamamen doğrudur (şimdiye kadar kontrol ettim). – prabhakaran

0
static class ControlHelper 
{ 
    public static void SelectExactMatch(this ComboBox c, string find) 
    { 
     c.SelectedIndex = c.FindStringExact(find, 0); 
    } 
} 
-1
CheckBoxList.Items.FindByValue("Value").Selected = true; 
İlgili konular