【问题标题】:Get index of a selected RadioButton in radioGroup获取 radioGroup 中选定 RadioButton 的索引
【发布时间】:2016-08-14 18:59:04
【问题描述】:

我想在 RadioGroup 中找到选定 RadioButton 的索引。我将下一个方法附加到组中的每个 RadioButton:

private void radio_button_CheckedChanged(object sender, EventArgs e){
    if (sender.GetType() != typeof(RadioButton)) return;
    if (((RadioButton)sender).Checked){
        int ndx = my_radio_group.Controls.IndexOf((Control)sender);
        // change something based on the ndx
    }
}

对我来说重要的是,较低的单选按钮必须具有较低的索引,从零开始。似乎它正在工作,但我不确定这是否是一个好的解决方案。也许有更多 betufilul 方法可以做到这一点。

【问题讨论】:

  • 您的目标是什么:Winforms、WPF、ASP..? 总是正确标记您的问题。
  • 我一直更喜欢使用单选按钮value 属性而不是它在组中的索引。这允许您更改顺序、插入新项目并且不需要事后更改代码(除了处理新选项的逻辑)。
  • @TaW winforms,编辑标签

标签: c# winforms checkbox radio-group


【解决方案1】:

这会给你CheckedRadioButton

private void radioButtons_CheckedChanged(object sender, EventArgs e)
{
    RadioButton rb = sender as RadioButton;
    if (rb.Checked)
    {
        Console.WriteLine(rb.Text);
    }
}

Parent 的 Controls 集合中的任何索引都具有高度易失性

您可以这样访问它:rb.Parent.Controls.IndexOf(rb) 如果除了NameText 之外,您还想要一个相对稳定的 ID,您可以将它放在Tag 中。

显然您需要将此事件关联到所有组中的RadionButtons

实际上不需要类型检查(或 imo 推荐),因为只有 RadioButton 可以(或者更确切地说:必须)触发此事件。

【讨论】:

  • 谢谢,它对我很有用。用于存储所需值的标签
【解决方案2】:

为了获得理想的索引,您希望将控件排列为集合。如果您可以从后面的代码中添加控件,那就简单了

List<RadionButton> _buttons = new List<RadioButton>();

_buttons.Add(new RadioButton() { ... });    
_buttons.Add(new RadioButton() { ... });    
...

如果你想使用表单设计,那么也许在表单构造函数中创建这个列表是一种选择:

List<RadioButtons> _list = new List<RadioButton>();

public Form1()
{
    InitializeComponent();
    _list.Add(radioButton1);
    _list.Add(radioButton2);
    ...
}

那么实际获取索引的任务就这么简单:

void radioButton_CheckedChanged(object sender, EventArgs e)
{
    var index = _list.IndexOf(sender);
    ...
}

【讨论】:

  • 你看到巴里链接的第一行了吗? ; - )
  • @Barry 的评论? wpf 一个?
  • 谢谢,这很有帮助,也许我以后会用它
  • @TaW,这个想法是创建(或最初拥有)专门的集合(除了Controls)。它可以是一个字典,然后使用 dictionary[sender] 可能比例如更好的 design使用Controls.Find(o =&gt; o == sender).Tag
  • 是的,但我们无法真正分辨,因为我们不知道索引应该做什么。这就是我要询问设计的问题。将信息放入标签是维护 Dictionary. 的廉价版本
【解决方案3】:
//----checked change----

private void radioButtons_CheckedChanged(object sender, EventArgs e)
{
  int ndx = 0;
            var buttons = RdoGroup.Controls.OfType<RadioButton>()
  .FirstOrDefault(n => n.Checked);

//-----in initialize set radioButton tags : this.radioButton1.Tag = "1";------

        if (buttons.Tag != null) ndx=Convert.ToInt32( buttons.Tag.ToString());
//--------do some thing by index----------

}

【讨论】:

  • 欢迎来到 Stack Overflow。当代码附有解释时,它会更有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请编辑您的问题并解释它如何回答所提出的具体问题。
猜你喜欢
  • 1970-01-01
  • 2021-03-02
  • 2013-06-09
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多