2

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

但是当我手动更改 checkRadioButton并按下 up/down 时,迭代会从更改之前的位置开始进行 checked RadioButton。问题是:

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

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

  • 如何正确更改当前选中的 RadioButton。

答: 除了设置radioButton.Checked = true。你需要把注意力集中在它上面—— radioButton.Focus()

示例:我有 6 个单选按钮 (0-5) 组。

  • 当前检查的是 RadioButton No.1 。
  • 我的功能将选中的 RadioButton 从 No.1 更改为 No.3 。
  • 用户按下 Arrow_Up 并且 RadioButton No.0 变为选中而不是 No.2。
4

3 回答 3

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

    没有事件对应于RadioButton您可以按下键而不释放但仍处理键命令的单个 s。但是,您可以覆盖ProcessCmdKey表单继承自的方法Form

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

    TabIndex财产。个体s没有内部索引。RadioButton但是由于您将它们放在 a GroupBoxwhich is a上Control,并且有一个名为的继承属性Controls是它的子控件的集合。

问题由例子提出,出现的问题TabIndex

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

于 2013-03-28T08:56:58.187 回答
1

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

于 2013-03-28T09:46:22.030 回答
0

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

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

您可以将 checkChanged 事件添加到所有单选按钮。

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

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

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

groupBox1.Controls.OfType<RadioButton>().ElementAtOrDefault(index).Select();
于 2013-03-28T09:00:55.493 回答