Di C # WinApp, bagaimana saya bisa menambahkan Teks dan Nilai ke item ComboBox saya? Saya melakukan pencarian dan biasanya jawabannya menggunakan "Binding ke sumber" .. tetapi dalam kasus saya saya tidak memiliki sumber yang mengikat siap dalam program saya ... Bagaimana saya bisa melakukan sesuatu seperti ini:
combo1.Item[1] = "DisplayText";
combo1.Item[1].Value = "useful Value"
sumber
Anda dapat menggunakan kelas anonim seperti ini:
UPDATE: Meskipun kode di atas akan ditampilkan dengan benar di kotak kombo, Anda tidak akan dapat menggunakan
SelectedValue
atauSelectedText
properti dariComboBox
. Untuk dapat menggunakannya, ikat kotak kombo seperti di bawah ini:sumber
List<Object> items = new List<Object>();
Kemudian saya bisa menggunakan metodeitems.Add( new { Text = "report A", Value = "reportA" } );
dalam loop.comboBox.SelectedItem.GetType().GetProperty("Value").GetValue(comboBox.SelectedItem, null)
DataSource
Anda dapat menggunakanSelectedValue
atauSelectedText
properti kotak kombo, jadi tidak perlu melakukan casting khusus.Anda harus menggunakan
dynamic
objek untuk menyelesaikan item kotak kombo dalam waktu berjalan.sumber
Anda bisa menggunakan
Dictionary
Object alih-alih membuat kelas khusus untuk menambahkan teks dan nilai dalam aCombobox
.Tambahkan kunci dan nilai dalam
Dictionary
Objek:Bind objek Kamus sumber ke
Combobox
:Ambil Kunci dan nilai:
Sumber Lengkap: Teks Combobox dan Nilai
sumber
Ini adalah salah satu cara yang baru saja terpikir:
combo1.Items.Add(new ListItem("Text", "Value"))
Dan untuk mengubah teks atau nilai suatu barang, Anda dapat melakukannya seperti ini:
Tidak ada kelas yang disebut ListItem di Windows Forms . Itu hanya ada di ASP.NET , jadi Anda harus menulis kelas Anda sendiri sebelum menggunakannya, sama seperti yang dilakukan @Adam Markowitz dalam jawabannya .
Periksa juga halaman-halaman ini, mereka dapat membantu:
Bagaimana menambahkan item ke kotak kombo
Cara: Menambahkan dan Menghapus Item dari ComboBox Windows Forms, ListBox, atau CheckedListBox Control
sumber
Tidak tahu apakah ini akan berfungsi untuk situasi yang diberikan di pos asli (apalagi fakta bahwa ini adalah dua tahun kemudian), tetapi contoh ini cocok untuk saya:
Untuk membaca kembali nilai Anda, Anda harus membuang properti SelectedItem ke objek DictionaryEntry, dan Anda kemudian bisa mengevaluasi properti Key dan Value dari itu. Misalnya:
sumber
sumber
Jika ada yang masih tertarik dengan hal ini, berikut adalah kelas sederhana dan fleksibel untuk item combobox dengan teks dan nilai jenis apa pun (sangat mirip dengan contoh Adam Markowitz):
Menggunakan
<T>
lebih baik daripada mendeklarasikanvalue
sebagaiobject
, karena dengan ituobject
Anda harus melacak jenis yang Anda gunakan untuk setiap item, dan memasukkannya ke dalam kode Anda untuk menggunakannya dengan benar.Saya sudah menggunakannya pada proyek saya untuk sementara waktu sekarang. Ini sangat berguna.
sumber
Saya menyukai jawaban fab tetapi tidak ingin menggunakan kamus untuk situasi saya jadi saya mengganti daftar tuple.
sumber
Contoh menggunakan DataTable:
sumber
Anda dapat menggunakan kode ini untuk memasukkan beberapa item ke dalam kotak kombo dengan teks dan nilai.
C #
XAML
sumber
Lebih jauh dari jawaban Adam Markowitz, berikut ini adalah cara tujuan umum (relatif) hanya mengatur
ItemSource
nilai - nilai kotak kombo menjadienums
, sambil menunjukkan atribut 'Deskripsi' kepada pengguna. (Anda akan berpikir semua orang ingin melakukan ini sehingga itu akan menjadi .NET one liner, tetapi tidak, dan ini adalah cara paling elegan yang saya temukan).Pertama, buat kelas sederhana ini untuk mengonversi nilai Enum apa pun menjadi item ComboBox:
Kedua di
OnLoad
event handler Anda, Anda perlu mengatur sumber dari kotak kombo Anda menjadi daftarComboEnumItems
berdasarkan setiap tipeEnum
AndaEnum
. Ini bisa dicapai dengan Linq. Kemudian cukup aturDisplayMemberPath
:Sekarang pengguna akan memilih dari daftar ramah pengguna Anda
Descriptions
, tetapi apa yang mereka pilih akan menjadienum
nilai yang dapat Anda gunakan dalam kode. Untuk mengakses pilihan pengguna dalam kode,comboBoxUserReadable.SelectedItem
akan menjadiComboEnumItem
dancomboBoxUserReadable.SelectedValue
akan menjadiEMyEnum
.sumber
Anda dapat menggunakan Jenis generik:
Contoh menggunakan int-Type sederhana:
sumber
Saya memiliki masalah yang sama, apa yang saya lakukan adalah menambahkan yang baru
ComboBox
dengan nilai dalam indeks yang sama kemudian yang pertama, dan kemudian ketika saya mengubah pokok kombo indeks dalam perubahan kedua pada waktu yang sama, maka saya mengambil nilainya dari kombo kedua dan menggunakannya.Ini kodenya:
sumber
Pembuat kelas:
Kode Form1:
sumber
Beginilah Visual Studio 2013 melakukannya:
Item tunggal:
Beberapa item:
Tidak perlu melakukan override kelas atau memasukkan hal lain. Dan ya itu
comboBox1->SelectedItem
dancomboBox1->SelectedIndex
panggilan masih bekerja.sumber
Ini mirip dengan beberapa jawaban lain, tetapi ringkas dan menghindari konversi ke kamus jika Anda sudah memiliki daftar.
Diberi
ComboBox
"combobox" pada formulir windows dan kelasSomeClass
denganstring
tipe propertiName
,Yang berarti SelectedItem adalah
SomeClass
objek darilist
, dan setiap itemcombobox
akan ditampilkan menggunakan namanya.sumber
DisplayMember
sebelumnya ... Saya selalu lupa itu ada. Saya terbiasa dengan solusi yang saya temukan sebelum saya memperhatikan properti ini, juga itu tidak selalu membantu. Tidak semua kelas memilikiName
atauTag
properti, atau memiliki properti string yang dapat digunakan secara sewenang-wenang sebagai teks tampilan.base.Method();
), Anda juga harus membuat kelas turunan untuk setiap jenis berbeda yang ingin Anda tambahkan ke kotak kombo atau kotak daftar. Kelas yang saya buat fleksibel, dapat digunakan dengan jenis apa pun tanpa usaha ekstra. Lihat di bawah untuk jawaban saya, dan katakan apa yang Anda pikirkan :)Ini adalah solusi yang sangat sederhana untuk bentuk windows jika semua yang dibutuhkan adalah nilai akhir sebagai (string). Nama-nama item akan ditampilkan di Combo Box dan nilai yang dipilih dapat dengan mudah dibandingkan.
dan pada event handler mendapatkan nilai (string) dari nilai yang dipilih
sumber
Solusi yang lebih baik di sini;
Retreive Data
sumber