如何正确更改当前在C#中检查单选按钮组的单选按钮

时间:2013-03-28 08:43:19

标签: c# .net winforms radio-button

我有GroupBox一堆RadioButtons。当他们有焦点时,我可以使用键向上/向下来迭代它们。

但是当我手动更改选中RadioButton并按向上/向下键时,迭代会从更改选中RadioButton之前的点开始。问题是:

  • 当RadioButton具有焦点时,什么控件处理事件对应于向上/向下键单击。

答案: 要处理TAB,ESC,RETURN或ARROW按钮KeyDown的事件,您需要覆盖控件的IsInputKey方法。或覆盖ProcessCmdKey而不是KeyDown

  • 如何正确更改当前已检查的RadioButton。

答案:   除了设置radioButton.Checked = true。您需要关注它 - radioButton.Focus()

实施例: 我有6组RadioButtons(0-5)。

  • 目前检查的是RadioButton No.1。
  • 我的功能更改已选中 RadioButton从1号到3号。
  • 用户按下Arrow_Up和 RadioButton No.0将被检查而不是No.2。

3 个答案:

答案 0 :(得分:2)

  1. 什么事件对应于上/下键点击RadioButton

    没有事件对应于您可以在不释放但仍处理关键命令的情况下按键的个人RadioButton。但是,您可以覆盖表单从ProcessCmdKey继承的Form方法:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        Console.WriteLine("123"); 
        return false; 
    } 
    
  2. 如何访问RadioButton组的内部索引器?

    TabIndex财产。 个人RadioButton没有内部索引。但是,因为您将它们放在GroupBox Control上,并且具有名为Controls的继承属性是它的子控件的集合。

  3. 示例中出现的问题出现了TabIndex的问题。

    Control是WinForm应用程序的大多数可视组件的基类。它有一个父/子层次结构,你放在RadioButton上的所有GroupBox都有相同的父级,而GroupBox本身拥有这些RadioButton s,并拥有属性Controls,您可以通过索引访问它们。

答案 1 :(得分:1)

好的,当用户按下向上/向下按钮时,他/她只是将焦点移动到单选按钮上。所以你只需要调用按钮的方法Focus(),你只需将check属性设置为true

答案 2 :(得分:0)

您可以像这样获得所选的单选按钮:

RadioButton checkedButton = Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked);

你可以将checkChanged事件添加到所有的radiobuttons。

这将获得所选单选按钮的索引:

int index = groupBox1.Controls.IndexOf(groupBox1.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked));

这将选择一个特定的索引:

groupBox1.Controls.OfType<RadioButton>().ElementAtOrDefault(index).Select();