面板未获得焦点我继续在我的简单图形程序(使用C#)中编写某种键盘导航程序。我又一次遇到了麻烦。我的问题是,我想要处理键盘输入,以移动一层左右。用鼠标移动图层已经很好了,但是控件没有得到焦点(此控件既不触发KeyUp/Keydown/KeyPress,也不触发GotFocus/LostFocus。)。因为我的类来自Panel(并且覆盖了几个事件),所以我也重写了上面提到的事件,但是我无法成功地触发这些事件。我认为我可以使用类似Keyboard.GetState()或ProcessCmdWnd之类的工具来实现键盘响应。然而:我仍然必须能够知道控制什么时候得到了关注。是否有某种优雅的方法将此功能添加到用户控件(这是基于Panel的)?我在这里检查了很多线程,我可能会使用这种方法用于键盘输入。然而,焦点问题仍然存在。非常感谢您事先提供的信息!伊戈尔。P.S.:我正在使用VS 2008用C#.NET v3.5编程。这是一个Windows,Forms应用程序,不是WPF.
3 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
using System;using System.Drawing;using System.Windows.Forms;class SelectablePanel : Panel { public SelectablePanel() { this.SetStyle(ControlStyles.Selectable, true); this.TabStop = true; } protected override void OnMouseDown(MouseEventArgs e) { this.Focus(); base.OnMouseDown(e); } protected override bool IsInputKey(Keys keyData) { if (keyData == Keys.Up || keyData == Keys.Down) return true; if (keyData == Keys.Left || keyData == Keys.Right) return true; return base.IsInputKey(keyData); } protected override void OnEnter(EventArgs e) { this.Invalidate(); base.OnEnter(e); } protected override void OnLeave(EventArgs e) { this.Invalidate(); base.OnLeave(e); } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); if (this.Focused) { var rc = this.ClientRectangle; rc.Inflate(-2, -2); ControlPaint.DrawFocusRectangle(pe.Graphics, rc); } }}
缥缈止盈
TA贡献2041条经验 获得超4个赞
private void mainPanel_MouseEnter(object sender, EventArgs e){ mainPanel.Focus();}
- 3 回答
- 0 关注
- 559 浏览
添加回答
举报
0/150
提交
取消