2012-06-22 150 views
7

我在groupBox中有一些radionButtons,我需要做的動作是什麼,我可以稱之爲「radiobuttons.checked之一更改」或從單選按鈕中找出哪些索引被更改。 我試過在事件列表中找到它,但我找不到合適的。在C中使用radioButtons的groupBox事件處理程序#

編輯: 爲了更清楚:我想知道是否存在一些亨德爾什麼,我會寫處理方法爲goupBox不是單一的單選按鈕。我知道如何使用radiButton.checkedChanged,但它不是我在找的東西.. 或者不同,我需要知道groupBox監視groupBox內發生了什麼 - 我的意思是隻有groupBox的處理程序。我發現處理程序「在組框中發生了什麼」或類似的(如果有的話)。

它在WFA(Windows演示應用程序)在Visual Studio 2012年

+0

您可能希望從問題主題或標記中的WPF開始。也標記不正確。 –

+0

儘管它不是WPF,但WFA,爲什麼提及它非常重要?如果我用C#編寫C#中的事件處理有些不同,那麼還不夠清楚。我想,如果它是一種編程語言,它應該是相同的(這對我來說似乎是合乎邏輯的,而且我沒有它不是的信息 - 但我也沒有任何信息,所以我問你,因爲你有問題用它)。 – user1097772

+0

也可能只有5個標籤下的問題... – user1097772

回答

1

System.Windows.Forms.RadioButton.CheckedChanged

是事件需要

所以做這樣的事情:

public Form1() 
    { 
     InitializeComponent(); 

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

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

假設您使用WinForms和標準的開箱即用控件,並且假設我正確解釋您的問題 –

+0

是的我使用WPF,不,你不是但是謝謝。我已經使用已更改的單選按鈕。我需要知道是否存在像「組中的某個對象的值改變」 - 我的意思是groupBox的事件處理程序不適用於radioButtons ...也許它不會... – user1097772

+0

Sry,打字錯誤WFA(Windows窗體應用程序) – user1097772

21

我想你想要做的是連接所有的Radi oButtons的CheckedChanged事件到相同的處理程序。

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

順便說一句,我假設你正在使用WinForms。 – davenewza

+1

+1。 Thnx教我如何將事件聯繫到一起! – MiKE

+2

這不會使事件觸發兩次嗎?一次是舊的選定的單選按鈕,一次是新的?因爲兩者都改變​​了價值,對吧? – Enrico

4

就我所知,沒有內置任何內容。

將標籤屬性設置爲某種指標(從0到n)。

添加CheckChangedHandler

點所有的按鈕它CheckChanged事件。

然後類似。

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

如果你有一些這些我會看看一個radiogroup組件。

+0

謝謝,但這是我目前的解決方案。 但是沒有radioGroup組件,組件列表中只有組框。所以我找到了一些groupBox的事件處理程序。 – user1097772

+0

沒有一個。所有groupbox都包含帶有邊框和標題的其他組件。我可以給你一些關於如何創建一個radiogroup compoent或擴展組框的想法。不能想出一個不存在的行爲。 –

1

我認爲你想要處理一個groupbox 中的一些單選按鈕的選擇,使用groupbox控件本身

可能你想這基本上是爲了避免代碼重複。

(即)爲設計器中的所有單選按鈕添加檢查更改事件,當存在更多控制時可能是單調乏味的。 由於它已經存在於一個組中,爲什麼不使用組控制對象來操作控件並在其中設置事件。

這是我如何理解你的問題,因此如下所示的解決方案。

設置在組合框中

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

處理程序中的所有單選按鈕控件共同的處理器,你可以決定由其他人指示哪個按鈕被改變,並做必要的行動。

2

我有同樣的問題:命名按鈕類型(gbxButtonType) 6單選按鈕的一組框, 8單選按鈕名爲圖標類型(gbxIconType)另一組框。當用戶從每個組合框中選擇一個單選按鈕時,在單擊DisplayButton後,將出現一個MessageBox,並應用所選內容。我的問題是組框沒有CheckedChanged事件。 AKN的解決方案完美地工作:

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

有用地擴展了AKN的答案,但效用非常窄。歡迎來到SO,伊曼紐爾! –

+0

非常感謝Tetsujin – Emanuel

1

//這裏你去喬克·弗蘭克·哈利迪的禮貌

 //^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

你也許可以用定時器做,但是這只是壞optimalization中,簡單的解決方案是,對於每個單選按鈕,只需將一個函數添加爲ChekedChanged事件即可。

0

GROUPBOX將限制只有一個單選按鈕檢查

所以SETP1:可以一 「的CheckedChanged」 事件處理程序分配給所有你單選按鈕

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

而且SETP2:實施這個事件處理程序像這樣(按單選按鈕的文本過濾)

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