Menggunakan WinForms; Apakah ada cara yang lebih baik untuk menemukan RadioButton yang dicentang untuk grup? Menurut saya, kode di bawah ini seharusnya tidak diperlukan. Ketika Anda mencentang RadioButton yang berbeda, maka RadioButton akan tahu mana yang harus dihapus centangnya… sehingga harus tahu mana yang dicentang. Bagaimana cara menarik informasi itu tanpa melakukan banyak pernyataan if (atau sakelar).
RadioButton rb = null;
if (m_RadioButton1.Checked == true)
{
rb = m_RadioButton1;
}
else if (m_RadioButton2.Checked == true)
{
rb = m_RadioButton2;
}
else if (m_RadioButton3.Checked == true)
{
rb = m_RadioButton3;
}
c#
.net
winforms
radio-button
Billy
sumber
sumber
Jawaban:
Anda bisa menggunakan LINQ:
Perhatikan bahwa ini mengharuskan semua tombol radio berada langsung di wadah yang sama (misalnya, Panel atau Formulir), dan hanya ada satu grup di wadah. Jika bukan itu masalahnya, Anda dapat membuat
List<RadioButton>
s di konstruktor Anda untuk setiap grup, lalu tulislist.FirstOrDefault(r => r.Checked)
.sumber
s.FirstOrDefault
bukanlist.FirstOrDefault
di paragraf kedua dari jawaban Anda?s
adalah bentuk jamak, bukan nama variabel.Anda dapat menyambungkan CheckedEvents dari semua tombol ke satu penangan. Di sana Anda dapat dengan mudah mendapatkan Kotak Centang yang benar.
sumber
Bagi mereka yang tidak memiliki LINQ:
sumber
OP ingin mencentang RadioButton OLEH GROUP. Meskipun jawaban @SLaks sangat bagus, itu tidak benar-benar menjawab pertanyaan utama OP. Untuk meningkatkan jawaban @SLaks, cukup gunakan LINQ selangkah lebih maju.
Inilah contoh dari kode kerja saya sendiri. Sesuai WPF normal, RadioButtons saya terkandung dalam file
Grid
(bernama "myGrid") dengan sekelompok jenis kontrol lainnya. Saya memiliki dua grup RadioButton berbeda di Grid.Untuk mendapatkan RadioButton yang dicentang dari grup tertentu:
Jika kode Anda memiliki kemungkinan tidak ada RadioButtons yang diperiksa, maka gunakan
SingleOrDefault()
(Jika saya tidak menggunakan tombol tri-state, maka saya selalu menetapkan satu tombol "IsChecked" sebagai pilihan default.)sumber
.Where(r => r.GroupName == "GroupName" && r.IsChecked == true)
karenar.IsChecked
adalah properti bool nullable.Anda dapat menggunakan acara CheckedChanged untuk semua RadioButtons Anda.
Sender
akan menjadi RadioButtons yang tidak dicentang dan dicentang.sumber
Anda dapat menggunakan metode Ekstensi untuk mengulang koleksi Parent.Controls RadioButton. Ini memungkinkan Anda untuk menanyakan RadioButtons lain dalam lingkup yang sama. Dengan menggunakan dua metode ekstensi, Anda dapat menggunakan yang pertama untuk menentukan apakah ada RadioButtons dalam grup yang dipilih, kemudian menggunakan yang kedua untuk mendapatkan pemilihan. Bidang RadioButton Tag dapat digunakan untuk menahan Enum untuk mengidentifikasi setiap RadioButton dalam grup:
Berikut pola penggunaan yang khas:
sumber
Selain kabel CheckedChangedEvent, seseorang dapat menggunakan properti Controls "Tag" untuk membedakan antara tombol radio ... alternatif (kode spaghetti) adalah properti "TabIndex"; P
sumber
Kadang-kadang dalam situasi seperti ini saya merindukan masa muda saya, ketika Access adalah racun pilihan saya, dan saya dapat memberikan nilai tersendiri pada setiap tombol radio dalam grup.
Retasan saya di C # adalah menggunakan tag untuk mengatur nilainya, dan ketika saya membuat pilihan dari grup, saya membaca nilai tag dari radiobutton yang dipilih. Dalam contoh ini, directionGroup adalah grup di mana saya memiliki empat lima tombol radio dengan "None" dan "NE", "SE", "NW" dan "SW" sebagai tag pada empat radiobuttons lainnya.
Saya secara proaktif menggunakan tombol untuk menangkap nilai dari tombol yang dicentang, karena menugaskan satu event handler ke semua event tombol 'CHeckCHanged' menyebabkan tombol SETIAP menyala, karena mengubah satu mengubah semuanya. Jadi nilai pengirim selalu menjadi RadioButton pertama di grup. Sebagai gantinya, saya menggunakan metode ini ketika saya perlu mencari tahu mana yang dipilih, dengan nilai yang ingin saya ambil di properti Tag dari setiap RadioButton.
FYI, saya telah menguji dan menggunakan ini dalam pekerjaan saya.
Joey
sumber
jika Anda ingin menyimpan pilihan ke file atau lainnya dan memanggilnya nanti, inilah yang saya lakukan
kemudian sebut dengan
sumber
Jika Anda ingin mendapatkan indeks tombol radio yang dipilih di dalam kontrol, Anda dapat menggunakan metode ini:
Contoh penggunaan:
Kode tersebut tidak diuji dengan baik, tetapi tampaknya urutan indeks adalah dari kiri ke kanan dan dari atas ke bawah, seperti saat membaca teks. Jika tidak ada tombol radio yang ditemukan, metode akan mengembalikan -1.
Pembaruan: Ternyata upaya pertama saya tidak berhasil jika tidak ada tombol radio di dalam kontrol. Saya menambahkan blok coba dan tangkap untuk memperbaikinya, dan metode ini sekarang tampaknya berfungsi.
sumber
GroupBox memiliki acara yang divalidasi untuk tujuan ini, jika Anda menggunakan WinForms.
sumber
Untuk pengembang yang menggunakan VB.NET
sumber