2013-08-31 25 views
12

Tôi có những groupboxes:Làm cách nào để nhận nút radio từ hộp nhóm?

Enter image description here

Tôi muốn chạy một số mã theo kiểm tra trạng thái thực sự của một nút radio như:

string chk = radiobutton.nme; // Name of radio button whose checked is true 
switch(chk) 
{ 
    case "Option1": 
     // Some code 
     break; 

    case "Option2": 
     // Some code 
     break; 

    case "Option3": 
     // Some code 
     break; 
} 

Có cách nào trực tiếp vì vậy mà tôi chỉ có thể lấy tên của nút radio đã chọn?

+0

Cảm ơn bạn đã đặt câu hỏi. Vì vậy, chúng tôi hưởng lợi ngay bây giờ :) – bonCodigo

+0

@bonCodigo Cảm ơn –

+0

có thể trùng lặp của [Nút radio nào trong nhóm được chọn?] (Http://stackoverflow.com/questions/1797907/which-radio-button-in-the-group- được kiểm tra) –

Trả lời

24

Bạn có thể tìm thấy tất cả các kiểm tra RadioButtons như

var buttons = this.Controls.OfType<RadioButton>() 
          .FirstOrDefault(n => n.Checked); 

Ngoài ra hãy xem tại CheckedChanged sự kiện.

Xảy ra khi giá trị của thuộc tính Đã kiểm tra thay đổi.

+1

Điều này không thể có được bất kỳ tốt hơn;) Chúc mừng! – bonCodigo

+0

@Soner Tôi đã cố gắng sử dụng mã này, nhưng nó cung cấp một lỗi của sự mơ hồ giữa ´Forms.RadioButton´ và ´Controls.RadioButton´, nó có nghĩa là gì? –

+0

@ CésarAmorim Cả hai hệ thống 'System.Windows.Controls' và' System.Windows.Forms' đều có lớp 'RadioButton'. Tôi cảm thấy, trong dự án của bạn, cả hai không gian tên này được thêm vào và trình biên dịch nhầm lẫn mà không gian tên thuộc về 'RadioButton' này khi bạn gõ nó chỉ là tên của nó. Như một giải pháp, bạn có thể sử dụng tên đầy đủ của nó để ngăn chặn tình trạng này như 'System.Windows.Controls.RadioButton' hoặc' System.Windows.Forms.RadioButton'. –

3

Bạn nên xem xét sự kiện CheckedChanged để đăng ký trình xử lý sự kiện tương ứng và lưu trữ trạng thái nút radio Checked ở một số biến. Tuy nhiên, tôi muốn sử dụng LINQ đây chỉ vì bạn chỉ có một số RadioButtons mà làm cho chi phí của Looping thể chấp nhận được:

var checkedRadio = new []{groupBox1, groupBox2} 
        .SelectMany(g=>g.Controls.OfType<RadioButton>() 
              .Where(r=>r.Checked)) 
// Print name 
foreach(var c in checkedRadio) 
    System.Diagnostics.Debug.Print(c.Name); 
-1

Theo tôi, tốt hơn nếu bạn sử dụng RadioGroup thay vì GroupBox. Nếu bạn sử dụng RadioGroup, bạn luôn có thể tìm thấy các sản phẩm được chọn một cách dễ dàng như thế này:

radioGroup.selectedIndex; 

Nếu bạn thiết kế sử dụng Windows Forms, tôi đề nghị để thực hiện RadioGroup hành vi như thế này (xin lưu ý rằng mã của tôi là trong Java):

for (Component comp:groupBox1.components) { 
    if (((RadioButton)comp).selected) 
     return ((RadioButton)comp).value; 
} 

Bạn có thể đặt khối mã này trong phương thức trả về giá trị nút radio đã chọn và sau đó bạn có thể sử dụng giá trị này trong phần SWITCH của mình.

+1

Tôi đang sử dụng biểu mẫu cửa sổ và không có tùy chọn nhóm radio –

+0

xin cho tôi biết cách sử dụng nó –

+0

@ Co.Aden Tôi đã cập nhật câu trả lời của mình, vui lòng kiểm tra –