Bagaimana cara mengatur item yang dipilih dalam kotak kombo agar sesuai dengan string saya menggunakan C #?

197

Aku punya string "test1" dan combobox saya mengandung test1, test2dan test3. Bagaimana cara mengatur item yang dipilih ke "test1"? Yaitu, bagaimana cara mencocokkan string saya dengan salah satu item kotak kombo?

Saya sedang memikirkan kalimat di bawah ini, tetapi ini tidak berhasil.

comboBox1.SelectedText = "test1"; 
Peter Mortensen
sumber
bagaimana cara kerjanya? Apa yang terjadi ketika baris kode ini dijalankan?
Kate Gregory
@KateGregory itu hanya menyatukan string "test1" dengan teks yang ada
solujic
Jika Anda memiliki cara untuk mengetahui nilai item yang dapat Anda gunakan: comboBox1.SelectedValue = Value_of_your_string;
César León
SelectedTextmengubah teks "Dipilih" menjadi test1. jika tidak ada "Pilihan" (teks bertanda) dibuat, teks akan dimasukkan ke posisi caret.
AaA

Jawaban:

278

Ini harus melakukan trik:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")
Norbert B.
sumber
Tampaknya jawaban yang lebih baik kepada saya karena Anda memiliki nilai pengembalian, Anda dapat menyimpan sementara dalam variabel dan menggunakannya untuk menguji apakah Anda telah menemukan nilai yang Anda cari.
Áxel Costas Pena
bagaimana jika ada lebih dari satu nilai "test1" di combox1
thoitbk
@thoitbk - Menurut MSDN di msdn.microsoft.com/en-us/library/… , metode FindStringExact() "Temukan item pertama dalam kotak kombo yang cocok dengan string yang ditentukan."
dub stylee
207

Sudahkah Anda mencoba properti Text ? Ini bekerja untuk saya.

ComboBox1.Text = "test1";

Properti SelectedText adalah untuk bagian yang dipilih dari teks yang dapat diedit di bagian kotak teks dari kotak kombo.

Andrew Kennan
sumber
7
Tentunya itu hanya mengatur teks di area yang dapat diedit dari ComboBox daripada memilih item yang relevan dari daftar? Jika koleksi item daftar berisi objek daripada hanya string, maka saya ragu ini akan memilih objek ListItem yang sesuai, bukan hanya akan mengatur properti Teks pada ComboBox?
TabbyCool
9
Itu mengatur properti SelectedValue dari kontrol
Henryk
Bagus. Berfungsi dengan indah untuk ukuran font, berat, dan pulldown keluarga. Tidak ada gips atau konversi antar kelas. Soooo jauh lebih mudah!
Lance Cleveland
3
Untuk jaga-jaga: Parameter ini harus ditetapkan hanya setelah mengisi kotak kombo.
Antoine Rodriguez
12
Combobox dropdownstyle saya adalah DropDownList dan .Text = "some text" tidak berfungsi. Solusi ini bekerja dengan baik untuk saya: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")
Mayank
48

Dengan asumsi bahwa kotak kombo Anda bukan basis data, Anda akan perlu menemukan indeks objek di koleksi "item" di formulir Anda dan kemudian mengatur properti "selectedindex" ke indeks yang sesuai.

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

Perlu diingat bahwa fungsi IndexOf dapat melempar argumen kecuali jika item tidak ditemukan.

Tempat menyimpan bahan makanan
sumber
1
Ingat itu SelectedINDEX bukan SelectedITEM ... Dan kompiler tidak akan mengeluh, hanya gagal untuk mengatur nilai combobox
Rob
Jangan Anda suka kesalahan logis yang tidak membuang pengecualian, mereka hanya tidak berfungsi ...
Spence
ini memilih item, tetapi tidak memanggil acara onChange di kotak kombo
mrid
39

Jika item di ComboBox Anda adalah string, Anda dapat mencoba:

comboBox1.SelectedItem = "test1";
Frederik Gheysels
sumber
18
Tidak bukan: msdn.microsoft.com/en-us/library/…
Frederik Gheysels
Selamat hari itu! Item yang dipilih harus sesuai dengan jenis - itu untuk saya! Aku menggaruk kepalaku mengapa item yang dipilih tidak disetel bahkan item itu jelas ada di sana - ternyata merupakan tipe ketidakcocokan!
Sudhanshu Mishra
Untuk kelengkapan, berguna untuk mendapatkan uraian dari tautan di atas, terutama karena jawaban ini melakukan pemeriksaan yang disarankan oleh jawaban lain termasuk yang disukai dari @norbertB: Ketika Anda mengatur properti SelectedItem ke objek, ComboBox berupaya membuat objek tersebut yang saat ini dipilih dalam daftar. Jika objek ditemukan dalam daftar , itu ditampilkan di bagian edit ComboBox dan properti SelectedIndex diatur ke indeks yang sesuai. Jika objek tidak ada dalam daftar, properti SelectedIndex dibiarkan pada nilai saat ini.
DanG
10

Bagi saya ini hanya berfungsi:

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

MOD: dan jika Anda memiliki objek sendiri sebagai item yang diatur dalam kotak kombo, maka gantikan ComboBoxItem dengan salah satunya seperti:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}
gabore
sumber
2
Ini bekerja untuk saya, tetapi Anda harus berhati-hati bahwa item di ComboBox Anda sebenarnya ComboBoxItems karena mungkin untuk menempatkan item lain di sana juga.
Berikan
Ini bekerja sangat baik di WinRT 8.1. Saya benar-benar membungkus foreach teratas dalam metode ekstensi seperti dave menulis dalam solusi SelectItemByValue (), dan itu benar-benar solusi yang sempurna.
Speednet
9

SelectedText adalah untuk mendapatkan atau mengatur teks aktual dalam editor string untuk item yang dipilih dalam kotak kombo seperti yang didokumentasikan di sini . Ini tidak dapat diedit jika Anda mengatur:

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

Menggunakan:

comboBox1.SelectedItem = "test1";

atau:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
Brian Rudolph
sumber
1
comboBox1.Items.IndexOf ... berisiko NullReferenceException jika Item kosong.
Gary
9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Coba ini di Formulir windows.

Muhammad Sohail
sumber
7

Saya telah menggunakan metode ekstensi:

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

Maka cukup konsumsilah metode ini:

ddl.SelectItemByValue(value);
dave
sumber
5
comboBox1.SelectedItem.Text = "test1";
Ben
sumber
4

Misalkan test1, test2, test3 milik koleksi comboBox1 pernyataan berikut akan bekerja.

comboBox1.SelectedIndex = 0; 
ihcarp
sumber
Ini tidak selalu berhasil ... Lihat di sini: stackoverflow.com/questions/12839444/…
JGFMK
4

Solusi ini didasarkan pada MSDN dengan beberapa modifikasi yang saya buat.

  • Ia menemukan tepat atau BAGIAN dari string dan set itu.

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

Saya harap saya membantu!

Roman Polen.
sumber
3

Saya telah mengisi ComboBox saya dengan een DataTable yang diisi dari database. Lalu saya sudah mengatur DisplayMember dan ValueMember. Dan saya menggunakan kode ini untuk mengatur item yang dipilih.

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

Anda tidak memiliki properti itu di ComboBox. Anda memiliki SelectedItem atau SelectedIndex. Jika Anda memiliki objek yang Anda gunakan untuk mengisi kotak kombo maka Anda dapat menggunakan SelectedItem.

Jika tidak, Anda bisa mendapatkan koleksi item (Item properti) dan iterate sampai Anda mendapatkan nilai yang Anda inginkan dan menggunakannya dengan properti lainnya.

semoga membantu.

Megacan
sumber
1
_cmbTemplates.SelectedText = "test1"

atau mungkin

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
Dekan
sumber
dengan kode ini, Anda menetapkan bool ke properti SelectedItem ... tidak akan berfungsi.
Frederik Gheysels
1
  • Hitung daftar item dalam kotak kombo
  • Dapatkan kotak kombo listindex set yang sama
  • Atur listindex ke yang ditemukan.

Tetapi jika saya melihat kode seperti itu sebagai pengkaji kode, saya akan merekomendasikan untuk mempertimbangkan kembali semua metode algoritma.

pengguna53378
sumber
2
Mengapa Anda memberikannya sebagai jawaban?
1

Saya menggunakan KeyValuePair untuk binding data ComboBox dan saya ingin menemukan item dengan nilai jadi ini bekerja dalam kasus saya:

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

Temukan mySecondObject (dari tipe MyObject) di combobox (berisi daftar MyObjects) dan pilih itemnya:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}
Jos Roestenberg
sumber
0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Untuk kasus Anda, Anda dapat menggunakan

DropDownList.Items.FindByText("Text");
pengguna874163
sumber
0
combo.Items.FindByValue("1").Selected = true;
Anderson
sumber
3
Ini juga beresiko pengecualian jika "1" tidak ditemukan.
Gary
0

Semua metode, trik, dan baris pengaturan kode item ComboBox tidak akan berfungsi sampai ComboBox memiliki orangtua.

pengguna3599362
sumber
0

Saya telah membuat Fungsi yang akan mengembalikan Indeks Nilai

        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;
        }
Monzurum
sumber
0

ini bekerja untuk saya .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
Jaydeep Karena
sumber
1
Meskipun kode ini dapat menjawab pertanyaan, lebih baik menjelaskan bagaimana menyelesaikan masalah dan memberikan kode sebagai contoh atau referensi. Jawaban khusus kode bisa membingungkan dan kurang konteks.
Robert Columbia
Terima kasih atas sarannya!
Jaydeep Karena
-1

Bisa dibilang begitu comboBox1.Text = comboBox1.Items[0].ToString();

Nishān Wickramrathna
sumber
-2

Silakan coba dengan cara ini, ini berfungsi untuk saya:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";
HuynhDo
sumber
Anda harus memeriksa bahwaIndex yang dipilih bukan -1 pertama, atau lebih tepatnya bahwa itu adalah = = 0 dan <.items.length.
Gary
-3

Itu harus bekerja

Yourcomboboxname.setselecteditem("yourstring");

Dan jika Anda ingin mengatur string database gunakan ini

Comboboxname.setselecteditem(ps.get string("databasestring"));
Deepak kumar
sumber