2012-06-22 64 views
7

Tôi có một số radionButton trong groupBox và tôi cần thực hiện hành động mà tôi có thể gọi là "radiobuttons.checked changed" hoặc tìm ra từ radiobutton chỉ mục nào bị thay đổi. Tôi đã cố gắng tìm nó trong danh sách các sự kiện nhưng tôi không thể tìm được sự kiện phù hợp.Xử lý sự kiện cho groupBox với radioButtons trong C#

Chỉnh sửa: Để làm cho nó rõ ràng hơn: Tôi cần phải biết nếu tồn tại một số handel cho những gì tôi sẽ viết phương pháp xử lý cho goupBox không cho radioButton duy nhất. Tôi biết làm thế nào để sử dụng radiButton.checkedChanged, nhưng nó không phải những gì tôi đang tìm .. Hoặc khác nhau tôi cần phải biết những gì các tùy chọn có groupBox trong giám sát những gì xảy ra bên trong groupBox này - Tôi có nghĩa là chỉ xử lý cho groupBox. Tôi đang tìm kiếm xử lý "trong hộp nhóm là một cái gì đó sẽ xảy ra" hoặc simimilar nếu có tồn tại.

Đó là trong WFA (Windows Presentation Application) trong Visual Studio 2012.

+0

Bạn có thể muốn bắt đầu với WPF trong chủ đề câu hỏi hoặc trong các thẻ. Cũng được gắn thẻ không chính xác. –

+0

Exept nó không phải WPF nhưng WFA, tại sao nó rất quan trọng để đề cập đến nó? Nó không rõ ràng enought nếu tôi đã viết đó là trong C# có một số diference trong xử lý sự kiện trong C#? Tôi cho rằng nếu nó là một ngôn ngữ lập trình thì nó sẽ giống nhau (Nó có vẻ hợp lý đối với tôi và tôi không có thông tin gì - nhưng tôi cũng không có nó, vì vậy tôi hỏi bạn vì bạn có vấn đề với nó). – user1097772

+0

Cũng có thể chỉ có 5 thẻ theo câu hỏi ... – user1097772

Trả lời

1

System.Windows.Forms.RadioButton.CheckedChanged

là trường hợp bạn cần

Vì vậy, làm một cái gì đó như :

public Form1() 
    { 
     InitializeComponent(); 

     this.radioButton1.CheckedChanged += new EventHandler(radioButton1_CheckedChanged); 
    } 

    private void radioButton1_CheckedChanged(object sender, EventArgs e) 
    { 
     // your action 
    } 
+0

giả sử bạn đang sử dụng WinForms, và tiêu chuẩn ra khỏi hộp điều khiển, và cũng giả định rằng tôi đang giải thích câu hỏi của bạn một cách chính xác –

+0

Vâng tôi đang sử dụng WPF, không có bạn không nhưng cảm ơn. Tôi đã sử dụng nút đã chọn đã thay đổi cho nút radio đơn. Tôi cần phải biết nếu tồn tại một cái gì đó như "giá trị của một số đối tượng trong groupBox được thay đổi" - Tôi có nghĩa là xử lý sự kiện cho groupBox không cho radioButtons ... Có lẽ nó không ... – user1097772

+0

Sry, offoourse typo WFA (Windows Forms Application) – user1097772

21

Tôi nghĩ điều bạn muốn làm là nối tất cả Radi oButtons 'CheckedChanged event cho cùng một trình xử lý.

public Form1() 
{ 
    radioButton1.CheckedChanged += new EventHandler(radioButtons_CheckedChanged); 
    radioButton2.CheckedChanged += new EventHandler(radioButtons_CheckedChanged); 

    // ... 
} 

private void radioButtons_CheckedChanged (object sender, EventArgs e) 
{ 
    RadioButton radioButton = sender as RadioButton; 

    if (radioButton1.Checked) 
    { 
     // Do stuff 
    } 
    else if (radioButton2.Checked) 
    { 
     // Do other stuff 
    } 
} 
+1

Btw, tôi giả định rằng bạn đang sử dụng WinForms. – davenewza

+1

+1. Thnx đã dạy tôi cách liên kết các sự kiện thành một! – MiKE

+2

Điều này không kích hoạt sự kiện hai lần? Một lần cho nút radio đã chọn cũ và một lần cho nút radio mới? bởi vì cả hai giá trị thay đổi, phải không? – Enrico

4

Không có gì được tích hợp cho điều đó theo như tôi biết.

Đặt thuộc tính thẻ thành một số loại chỉ báo (0 đến n) sẽ thực hiện.

Thêm một CheckChangedHandler

điểm tất cả các nút CheckChanged sự kiện tại đó.

sau đó có gì đó tương tự.

private void radioButtons_CheckedChanged (object sender, EventArgs e) 
{  
    RadioButton radioButton = sender as RadioButton;  
    int buttonid = (int)radioButton.Tag; 
    switch (buttonid) 
    { 
    case 0 : // do something; break 
    } 
} 

Nếu bạn có một vài trong số này, tôi sẽ xem xét thành phần radiogroup.

+0

Cảm ơn nhưng giải pháp hiện tại của tôi. Nhưng không có thành phần radioGroup, chỉ có hộp nhóm trong danh sách các thành phần. Vì vậy, tôi đang tìm một số xử lý sự kiện cho groupBox. – user1097772

+0

Không có. Tất cả các hộp nhóm đều chứa các thành phần khác có đường viền và chú thích. Tôi có thể cung cấp cho bạn một số ý tưởng về cách tạo ra một tổ hợp radiogroup, hoặc mở rộng hộp nhóm.Không thể nghĩ ra một hành vi không tồn tại. –

1

Tôi nghĩ bạn muốn xử lý việc chọn một số nút radio bên trong hộp nhóm bằng cách sử dụng điều khiển hộp nhóm chính nó.

Có thể bạn muốn điều này về cơ bản để tránh lặp lại mã.

(tức là) thêm sự kiện thay đổi séc cho tất cả nút radio trong trình thiết kế có thể bị tẻ nhạt khi có nhiều quyền kiểm soát hơn. Kể từ khi nó đã có mặt dưới một nhóm, tại sao không sử dụng đối tượng điều khiển nhóm để thao tác điều khiển với-in và thiết lập các sự kiện.

Đây là cách tôi hiểu vấn đề của bạn và do đó giải pháp như được chỉ ra bên dưới.

Set một handler chung cho tất cả các nút điều khiển radio trong nhóm hộp

for (int i = 0; i < groupBox.Controls.Count; i++) 
{ 
    RadioButton rb = (RadioButton)groupBox.Controls[i]; 
    rb.CheckedChanged += new System.EventHandler(evntHandler); 
} 

Bên trong xử lý, bạn có thể xác định nút được thay đổi như được chỉ ra bởi những người khác và làm những hành động cần thiết.

2

tôi đã cùng một vấn đề: một hộp nhóm có tên Nút Loại(gbxButtonType) với 6 nút radio và hộp khác nhóm có tên Biểu tượng Loại(gbxIconType) với 8 nút radio. Khi người dùng đã chọn một nút radio từ mỗi hộp nhóm, một Hộp thông báo sẽ xuất hiện với lựa chọn được áp dụng sau khi nhấp vào DisplayButton. Vấn đề của tôi là các hộp nhóm không có sự kiện CheckedChanged. Các giải pháp của AKN làm việc một cách hoàn hảo:

public Form1() 
    { 
     InitializeComponent(); 

     for (int i = 0; i < gbxButtonType.Controls.Count; i++) 
     { 
      RadioButton rdb = (RadioButton)gbxButtonType.Controls[i]; 
      rdb.CheckedChanged += new System.EventHandler(gbxButtonType_CheckedChanged); 
     } 

     for (int i = 0; i < gbxIconType.Controls.Count; i++) 
     { 
      RadioButton rdb = (RadioButton)gbxIconType.Controls[i]; 
      rdb.CheckedChanged += new System.EventHandler(gbxIconType_CheckedChanged); 
     } 
    } 

private void gbxIconType_CheckedChanged(object sender, EventArgs e) 
    { 
     if (sender == rdbAsterisk) 
     { 
      iconType = MessageBoxIcon.Asterisk; 
     } 
     else if (sender == rdbError) 
     { 
      iconType = MessageBoxIcon.Error; 
     } 
     ... 
     else 
     { 
      iconType = MessageBoxIcon.Warning; 
     } 
    } 
+0

Sử dụng một cách có hiệu quả câu trả lời của AKN, nhưng bằng một khoản lợi nhuận rất nhỏ. Chào mừng bạn đến với SO, Emanuel! –

+0

Cảm ơn bạn rất nhiều, Tetsujin – Emanuel

1

// Ở đây bạn đi biếu không của Jock Frank Halliday

 //^subscribe events to radio button check changed 
    private void seriesTxtBxEvent() 
    { 
     //Show txtBx 
     this.radBtn_RoomSeries.CheckedChanged += new EventHandler(showSeriesTxtBx_Event); 
     //Hide txtBx 
     this.radBtn_RoomNumber.CheckedChanged += new EventHandler(hideSeriesTxtBx_Event); 
     this.radBtn_RoomName.CheckedChanged += new EventHandler(hideSeriesTxtBx_Event); 
     this.radBtn_RoomLevel.CheckedChanged += new EventHandler(hideSeriesTxtBx_Event); 
     this.radBtn_RoomDep.CheckedChanged += new EventHandler(hideSeriesTxtBx_Event); 
    } 



    private void hideSeriesTxtBx_Event(object sender, EventArgs e) 
    { 
     tbx_SheetSeries.Visible = false; 
    } 


    private void showSeriesTxtBx_Event(object sender, EventArgs e) 
    { 
     tbx_SheetSeries.Visible = true; 
    } 
0
//Form Start 

void MainFormLoad(object sender, EventArgs e) 
{ 

    Control.ControlCollection locais = groupBoxLocalização.Controls; 

     foreach (CheckBox chkBox in locais) 
     { 
      chkBox.MouseUp += chkBoxLocais_MouseUp; 
     } 
} 

// Event 
void chkBoxLocais_MouseUp(object sender, MouseEventArgs e) 
{ 

    //Tratar individualmente 
    CheckBox chk = (CheckBox)sender; 

    //ou para tratar todos objetos de uma vez 

    Control.ControlCollection locais = groupBoxLocalização.Controls; 
    foreach (CheckBox chkBox in locais) { 
     //chkBox.... 
    } 

} 
0

Bạn có lẽ có thể làm điều đó với Timer, nhưng đó là chỉ có hại cho optimalization, các giải pháp dễ dàng là cho mỗi radiobutton bạn chỉ cần thêm một chức năng như sự kiện ChekedChanged.

0

GroupBox sẽ hạn chế chỉ có một nút radio kiểm tra

Vì vậy Setp1: bạn có thể gán một "CheckedChanged" xử lý sự kiện cho tất cả các bạn nút radio

private void initRadio() 
{ 
     radio_button1.CheckedChanged += Radio_show_CheckedChanged; 
     radio_button2.CheckedChanged +=Radio_show_CheckedChanged; 
} 

Setp2: thực hiện trình xử lý sự kiện này như thế này (Lọc theo Văn bản Nút của Đài phát thanh)

private void Radio_show_CheckedChanged(object sender, EventArgs e) 
{ 
    RadioButton radioButton = sender as RadioButton; 
    if (radioButton.Checked == true) { //limited only checked button do function 
     switch (radioButton.Text) 
     { 
      case "name1": 
       // do your stuff ... 
       break; 
      case "name2": 
       // do your stuff ... 
       break; 
     } 
    } 
} 
Các vấn đề liên quan