gpt4 book ai didi

c# - UserControl 中未触发 KeyDown 事件

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:20 26 4
gpt4 key购买 nike

我有一个 UserControl,它有一个 TreeView 和一个 TabControl。此用户控件以正常形式托管。

如果用户从 TreeView 中选择某些内容,自定义图片框将添加到选项卡控件的选项卡页面。现在我想处理这个图片框上的键,但是我在自定义图片框中创建的事件没有被调用。我想要的是处理箭头键,但焦点停留在 TreeView 上,因此箭头键只出现在 TreeView 中。

我添加了代码以在用户单击图片框时将焦点放在图片框上,但这无助于从 TreeView 中移除焦点。这是我在 custompicturebox 控件中的部分代码:

更新似乎只有像箭头键这样的特殊键不起作用,我猜是因为 TreeView 正在注册箭头键。如果我将图片框中的 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?
}

在托管此 UserControl 的表单中,我将 KeyPreview 设置为 True,但我还必须处理此表单上的其他事件。也许这就是我无法在自定义控件中获取按键的原因?

    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;
}
}

程序如下所示: enter image description here

最佳答案

处理此问题的一种方法是覆盖表单的 ProcessCmdKey方法。在将消息发送到目标控件(具有焦点的控件)之前,您将在其中收到 WM_KEYDOWN 消息。在那里,您可以执行自己的逻辑来处理击键,并允许或禁止进一步处理消息。

关于c# - UserControl 中未触发 KeyDown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12156570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com