我有一个UserControl
有一个TreeView
和一个TabControl
。此用户控件以正常形式托管。
如果用户从树形视图中选择某些内容,则会将自定义图片框添加到选项卡控件的选项卡页中。现在我想处理这个图片框上的键,但是我在 custompicturebox 中创建的事件没有被调用。我想要的是处理箭头键,但焦点停留在树视图上,所以箭头键只发生在树视图中。
当用户单击它时,我添加了代码以将焦点集中在图片框上,但它无助于从树视图中删除焦点。这是我在 custompicturebox 控件中的部分代码:
更新
似乎只有像箭头键这样的特殊键不起作用,我猜是因为树视图正在注册箭头键。如果我将图片框中的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;
}
}
这是程序的样子: