【问题标题】:How can I give a radio button a value and determine the selected radio button without using a GroupBox如何在不使用 GroupBox 的情况下给单选按钮一个值并确定选定的单选按钮
【发布时间】:2023-03-03 06:30:20
【问题描述】:

我有一个带有几个单选按钮的表单,它们假设代表不同的整数值。

1) 是否有一种内置 方法可以将值“置于”单选按钮的“后面”? 一个例子:

RadioButton rad = new RadioButton();
rad.Value = 5; // This is what im trying to achieve.

2) 我有几个在逻辑上相互关联的 RadioButton,我想知道选择了哪个(没有将它们放在 GroupBox 控件中)并获取该 RadioButton 的选定值。 注意:我想“迭代”这 3 个控件并获取选定的控件,而不是执行 3 个 IF 语句。 一个例子:

RadioButton radColor1 = new RadioButton();
RadioButton radColor2 = new RadioButton();
RadioButton radColor3 = new RadioButton();

// ...

RadioButton radSelected = ?? // Get selected Radio Button from the 3 above.
//here i can get to radSelected.Value

【问题讨论】:

  • 您的问题包含两个不同的主题。请下次发布两个单独的问题。

标签: c# .net winforms radio-button controls


【解决方案1】:

如果要为控件分配任意值,请使用其Tag 属性:

radColor1.Tag = 5;

但是为什么不能简单地使用Checked 属性呢?

if (radColor1.Checked)
    //do something
if (radColor2.Checked)
    //do something else
//...however many more you need to check

编辑:迭代...

foreach (Control c in this.Controls)
{
    if (c is RadioButton)
    {
        if (((RadioButton)c).Checked)
        //do something
    }
}

【讨论】:

  • 我想“迭代”这 3 个控件并获取选定的控件,而不是执行 3 个 IF 语句。
  • 关于 (1) 的解决方案:Tag 属性肯定有帮助,我不确定是否应该使用它。 (2): 唯一的问题是你实际上迭代了表单上的整个单选按钮,我想“迭代”它们中的某些数量而不将它们放在 groupbox 或类似的东西中。也许我应该为他们使用一个面板?
  • 你需要一些方法来区分它们。某种包含控制的作品。以某种方式命名它们是有效的。使用Tag 标记每个都有效。但如果是 3/10 单选按钮,您需要以某种方式发现它们。
【解决方案2】:

将这些无线电 btns 放入 stackPanel 并迭代以检查 If Checked &而不是使用 tag 属性来存储每个 radio button 的值

foreach(var child in stack.Children)
{
    if((child as RadioButton).Checked == true)
    var value = (child as RadioButton).tag;
}

【讨论】:

    【解决方案3】:
    RadioButton radSelected = (from RadioButton rb in this.Controls
                              where rb.Checked 
                              select rb).SingleOrDefault();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 2022-01-17
      • 2011-07-28
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      相关资源
      最近更新 更多