2012-06-22 105 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; 
     } 
    } 
}