在C#中使用radioButtons的groupBox的事件处理程序

时间:2012-06-22 16:44:55

标签: c# event-handling radio-button groupbox

我在groupBox中有一些radionButtons,我需要做一些我可以称之为“radiobuttons.checked之一”的动作,或者从radiobutton中找出哪些索引被改变了。 我试图在事件列表中找到它,但我找不到合适的事件。

修改 为了使它更清楚:我需要知道是否存在一些handel,因为我将为goupBox编写处理程序方法而不是单个radioButton。我知道如何使用radiButton.checkedChanged,但它不是我发现的...... 或者不同的是,我需要知道groupBox在监视这个groupBox中发生了什么的选项 - 我的意思是只有groupBox的处理程序。我发现处理程序“在组框中是发生的事情”或者如果存在则相似。

它位于Visual Studio 2012中的 WFA(Windows演示应用程序)中。

12 个答案:

答案 0 :(得分:28)

我认为您要做的是将所有RadioButtons的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 :(得分:5)

据我所知,没有内置任何内容。

将tag属性设置为某种指示符(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
  }
} 

如果您有其中的一些,我会看一个放射性组件。

答案 2 :(得分:3)

我遇到了同样的问题:一个名为按钮类型 (gbxButtonType)的组合框,包含6个单选按钮和另一个名为图标类型的组框(gbxIconType),带8个单选按钮。当用户从每个组框中选择一个单选按钮时,将出现一个MessageBox,并在单击 DisplayButton 后应用选择。我的问题是组框没有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;
        }
   }

答案 3 :(得分:2)

类似于davenewza的回答(可能应该是评论,但我的声誉不高),但是事件对于整个单选按钮组仅触发一次。

VerificationToken

答案 4 :(得分: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
    }

答案 5 :(得分:1)

我认为你想要使用groupbox控件本身来处理组合框中某些单选按钮的选择

您可能希望这基本上避免重复代码。

(即)为设计师中的所有单选按钮添加检查更改事件,当有更多控制时,这可能是单调乏味的。 由于它已经存在于一个组中,为什么不使用组控制对象来操作控件并设置事件。

这就是我理解你的问题的方法,因此也就是如下所示的解决方案。

为组框中的所有单选按钮控件设置公共处理程序

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

在处理程序内部,您可以确定按其他人指示更改了哪个按钮并执行必要的操作。

答案 6 :(得分:1)

//在这里,你得到了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;
    }

答案 7 :(得分:1)

Groupbox只会限制选中一个单选按钮

所以 Setp1:你可以分配一个&#34; CheckedChanged&#34;所有单选按钮的事件处理程序

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

Setp2:像这样实现此事件处理程序(按单选按钮&#39;文本过滤)

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

答案 8 :(得分:0)

{{1}}

答案 9 :(得分:0)

你可以用Timer来做,但这对于优化来说是不好的,简单的解决方案就是对于每个单选按钮,你只需要添加一个函数作为ChekedChanged事件。

答案 10 :(得分:0)

  1. 通过双击任意一个单选按钮来创建一个Checked事件,复制Visual Studio为该事件创建的方法的名称
  2. 转到所有单选按钮,然后从“属性资源管理器”>“事件”部分将事件更改为复制的事件
  3. 在生成的方法中,使用以下代码。这会触发所有单选按钮的事件,但只会“执行您的操作”一次

代码:

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

    if (rb.Checked == false) return;

    // Do your thing
}

答案 11 :(得分:0)

  1. 在设计器事件列表中的一个单选按钮上创建事件 Checked_Changed。

  2. 从 Checked_Changed 前面的下拉列表向每个单选按钮添加相同的事件 每个电台的事件

  3. 内部检查更改的事件使用

    private void CheckedChanged(object sender,EventArgs e)
    {
     var radio = groupBox.Controls.OfType<RadioButton>                  
                ().FirstOrDefault(r => r.Checked).Name;
    }
    

您现在可以了解哪个收音机处于活动状态。