我在groupBox中有一些radionButtons,我需要做一些我可以称之为“radiobuttons.checked之一”的动作,或者从radiobutton中找出哪些索引被改变了。 我试图在事件列表中找到它,但我找不到合适的事件。
修改 为了使它更清楚:我需要知道是否存在一些handel,因为我将为goupBox编写处理程序方法而不是单个radioButton。我知道如何使用radiButton.checkedChanged,但它不是我发现的...... 或者不同的是,我需要知道groupBox在监视这个groupBox中发生了什么的选项 - 我的意思是只有groupBox的处理程序。我发现处理程序“在组框中是发生的事情”或者如果存在则相似。
它位于Visual Studio 2012中的 WFA(Windows演示应用程序)中。
答案 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)
代码:
private void radioButtons_CheckedChanged (object sender, EventArgs e)
{
RadioButton rb = sender as RadioButton;
if (rb.Checked == false) return;
// Do your thing
}
答案 11 :(得分:0)
在设计器事件列表中的一个单选按钮上创建事件 Checked_Changed。
从 Checked_Changed 前面的下拉列表向每个单选按钮添加相同的事件 每个电台的事件
内部检查更改的事件使用
private void CheckedChanged(object sender,EventArgs e)
{
var radio = groupBox.Controls.OfType<RadioButton>
().FirstOrDefault(r => r.Checked).Name;
}
您现在可以了解哪个收音机处于活动状态。