【问题标题】:Arrow keys and changing control's focus hang the application箭头键和更改控件的焦点会挂起应用程序
【发布时间】:2010-10-29 13:27:41
【问题描述】:

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

我的表单包含用户控件和一个文本框。我订阅了用户控件的CheckedChanged 事件,根据选中的单选按钮,我要么禁用文本框,要么将焦点放在文本框内。

当更改单选按钮的检查状态时,所有这些都可以通过鼠标单击正常工作。但是,当使用箭头键时,这将无限期挂起。我不明白为什么会有差异。

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

  1. 创建一个用户控件并删除一个FlowLayoutPanel 控件并设置它的FlowDirection = TopDown。然后将两个单选按钮添加到FlowLayoutPanel

  2. 在用户控件中提供事件处理程序

    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. 运行。请注意,如果您使用鼠标在单选按钮之间单击,则一切正常;但如果你使用向上/向下箭头键,它会崩溃。

【问题讨论】:

  • 我打赌你的问题没有包含足够的信息来解决这个问题。你能设计出最简单(代码行最少)的测试用例来演示问题并将其添加到这里吗?

标签: c# winforms keyboard


【解决方案1】:
public event EventHandler CheckedChanged
{
    add {
         radioButton2.CheckedChanged += value;
        }
    remove {
         radioButton2.CheckedChanged -= value;
        }
}

嗯,value 未初始化?还是我错过了什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多