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

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

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.


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.


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


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

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

1
comboBox1.Items.IndexOf ... berisiko NullReferenceException jika Item kosong.
Gary

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

Coba ini di Formulir windows.


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

5
comboBox1.SelectedItem.Text = "test1";


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!


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

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.


1
_cmbTemplates.SelectedText = "test1"

atau mungkin

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

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.


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

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

0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Untuk kasus Anda, Anda dapat menggunakan

DropDownList.Items.FindByText("Text");

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

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.


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

0

ini bekerja untuk saya .....

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

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


-2

Silakan coba dengan cara ini, ini berfungsi untuk saya:

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

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"));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.