箭头键和更改控件的焦点会使应用程序挂起

时间:2009-05-28 11:50:02

标签: c# winforms keyboard

我有一个usercontrol,其中包含FlowLayoutPanel(自上而下流)和一堆radiobuttons。该控件公开了CheckedChanged事件,只要其中一个单选按钮的检查发生更改,就会触发该事件。

我的表单包含usercontrol和一个文本框。我订阅了usercontrol的CheckedChanged事件,并根据检查的radiobutton,我要么禁用文本框,要么将焦点放在文本框中。

在更改radiobutton的检查状态时,使用鼠标点击这一切都可以正常工作。但是,使用箭头键时,这将无限期挂起。我不明白为什么会有这种差异。

以下是重现我所看到的行为的步骤:

  1. 创建一个usercontrol并删除FlowLayoutPanel控件并设置其FlowDirection = TopDown。然后将两个radiobuttons添加到FlowLayoutPanel

  2. 在usercontrol中提供事件处理程序

    public event EventHandler CheckedChanged
    {
        add { radioButton2.CheckedChanged += value; }
        remove { radioButton2.CheckedChanged -= value; }
    }
    
  3. 创建一个Windows窗体并删除上面的用户控件。添加文本框并将Enabled设置为False。订阅usercontrol的CheckedChanged事件,如下所示

    private void userControl11_CheckedChanged(object sender, EventArgs e)
    {
        textBox1.Select();
    }
    
  4. 运行。请注意,如果您使用鼠标在单选按钮之间单击,则可以正常工作;但如果使用向上/向下箭头键,它会崩溃。

1 个答案:

答案 0 :(得分:0)

public event EventHandler CheckedChanged
{
    add {
         radioButton2.CheckedChanged += value;
        }
    remove {
         radioButton2.CheckedChanged -= value;
        }
}

嗯,value未初始化?或者我错过了什么?