在winform中捕获上下键左右键等控制建的KeyPress事件

在winform中Form的KeyDown,KeyPress,KeyUp三个键盘事件,只可以捕获字符键,而不可以捕获TAB,HOME,UP,DOWN等控制键。如果要使用这几个键,可以重写Control的ProcessDialogKey方法,在此方法中可以做相关的事件处理。

例如下面的一段代码是CSS背景图合并工具中用户控制图片上下左右移动位置的代码

protected override bool ProcessDialogKey(Keys keyData)
{
    
if (_selectedPicture != null)
    {
        
switch (keyData)
        {
            
case Keys.Left:
                
if (_selectedPicture.Location.X > 0) _selectedPicture.Location = new Point(_selectedPicture.Location.X - 1, _selectedPicture.Location.Y);
                
break;
            
case Keys.Right:
                _selectedPicture.Location 
= new Point(_selectedPicture.Location.X + 1, _selectedPicture.Location.Y);
                
break;
            
case Keys.Up:
                
if (_selectedPicture.Location.Y > 0) _selectedPicture.Location = new Point(_selectedPicture.Location.X, _selectedPicture.Location.Y - 1);
                
break;
            
case Keys.Down:
                _selectedPicture.Location 
= new Point(_selectedPicture.Location.X, _selectedPicture.Location.Y + 1);
                
break;
            
default:
                
break;
        }
    }

    
return base.ProcessDialogKey(keyData);
}
原文地址:https://www.cnblogs.com/yukaizhao/p/ProcessDialogKey.html