积极答复者
关于Control的OnKeyUp的疑问

问题
-
设置了一个控件A,通过OnKeyUp捕获↑/↓,以对控件进行重绘
在一个窗体上放置两个控件A,发现OnKeyUp被控件1和控件2间隔性应答,如何能固定到当前焦点所在控件?
控件代码如下:
namespace Test { public partial class TestControl : Control { public TestControl() { InitializeComponent(); } private string _keyPress = string.Empty; protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.DrawString(_keyPress, this.Font, new SolidBrush(Color.Black), 20, 20); } /// <summary> /// 间隔响应??? /// </summary> /// <param name="e"></param> protected override void OnKeyUp(KeyEventArgs e) { base.OnKeyUp(e); int kv = e.KeyValue; switch (kv) { case 38://↑ _keyPress = _keyPress + "↑"; e.Handled = true; break; case 40://↓ _keyPress = _keyPress + "↓"; e.Handled = true; break; } this.Refresh(); } } }
- 已编辑 chinull 2012年1月4日 2:19
答案
-
把构造函数修改成这样
public TestControl()
{
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.Selectable, true);DoubleBuffered = true;
}
问题已经解决了,果然是↑/↓造成了控件焦点的变化
把这两个控件分别放在两个Panel里面,切断了同一容器中↑/↓切换控件焦点(在不同的容器或分组间不会切换焦点),问题解决了
不过,在同一容器或分组中,如何让↑/↓不响应焦点切换,只在控件内响应呢,还是没有什么眉目
- 已标记为答案 chinull 2012年1月4日 3:36
全部回复
-
把构造函数修改成这样
public TestControl()
{
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.Selectable, true);DoubleBuffered = true;
}
问题已经解决了,果然是↑/↓造成了控件焦点的变化
把这两个控件分别放在两个Panel里面,切断了同一容器中↑/↓切换控件焦点(在不同的容器或分组间不会切换焦点),问题解决了
不过,在同一容器或分组中,如何让↑/↓不响应焦点切换,只在控件内响应呢,还是没有什么眉目
- 已标记为答案 chinull 2012年1月4日 3:36