Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未在UserControl中触发KeyDown事件_C#_Winforms_Keyboard_Focus_Keyevent - Fatal编程技术网

C# 未在UserControl中触发KeyDown事件

C# 未在UserControl中触发KeyDown事件,c#,winforms,keyboard,focus,keyevent,C#,Winforms,Keyboard,Focus,Keyevent,我有一个UserControl,它有一个TreeView和一个TabControl。此usercontrol以正常形式承载 如果用户从treeview中选择某个内容,则会将自定义picturebox添加到tabcontrol的tabpage中。现在我想处理这个picturebox上的键,但是我在custompicturebox中创建的事件没有被调用。我想要的是处理箭头键,但是焦点停留在树视图上,所以箭头键只发生在树视图中 我使用代码在用户单击picturebox时为其提供焦点,但这无助于从tre

我有一个
UserControl
,它有一个
TreeView
和一个
TabControl
。此usercontrol以正常形式承载

如果用户从treeview中选择某个内容,则会将自定义picturebox添加到tabcontrol的tabpage中。现在我想处理这个picturebox上的键,但是我在custompicturebox中创建的事件没有被调用。我想要的是处理箭头键,但是焦点停留在树视图上,所以箭头键只发生在树视图中

我使用代码在用户单击picturebox时为其提供焦点,但这无助于从treeview中删除焦点。以下是我在custompicturebox控件中的部分代码:

更新 似乎只有像箭头键这样的特殊键不起作用,我的猜测是因为箭头键被treeview注册了。如果我将picturebox中的
KeyDown
事件更改为使用字符键,它会工作

private void IcPackageViewBox_KeyDown(object sender, KeyEventArgs e)
{
    if(e.KeyCode == Keys.Right)
    {
        OnPinClicked(_pinMap[_pinRectIndex].Pin);

        if (_pinRectIndex < _pinMap.Count)
            _pinRectIndex++;
        else
            _pinRectIndex = 0;
    }
}
    //Mouse Down Event
private void PackageViewBox_MouseDown(object sender, MouseEventArgs e)
{
    Focus();
    BringToFront(); //bring to front works! maybe it means focus should work also?
 }
下面是这个程序的样子:
处理此问题的一种方法是重写表单的方法。在那里,在将WM_KEYDOWN消息发送到目标控件(具有焦点的控件)之前,您将获得这些消息。在那里,您可以执行自己的处理击键的逻辑,并允许或不允许进一步处理消息。

处理此问题的一种方法是重写表单的方法。在那里,在将WM_KEYDOWN消息发送到目标控件(具有焦点的控件)之前,您将获得这些消息。在那里,您可以执行自己的处理击键的逻辑,并允许或不允许进一步处理消息

    private void MainForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Modifiers == Keys.Control)
        {
            projectBrowser.ControlKeyIsDown = true;
            e.Handled = true;
        } 
     }

    private void MainForm_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.LControlKey || e.KeyCode == Keys.RControlKey || e.KeyCode == Keys.ControlKey || e.KeyCode == Keys.Control)
        {
            projectBrowser.ControlKeyIsDown = false;
            e.Handled = true;
        }
    }