基本的WinFormKeyDown事件处理我正在使用WinForms。我为主窗体的KeyDown事件创建了一个事件处理程序,它调用按钮的Click事件处理程序。调用的Click事件处理程序取决于按下的特定键。如果用户单击按钮而不是使用该键,然后尝试使用该键,则该键(例如向下箭头)充当Tab循环,在窗体上的每个按钮控件之间改变焦点(而不是执行按键处理程序)。有任何想法吗?问题是,按钮在单击时具有焦点,因此后续按键不是由表单本身捕获的,而是由按钮捕获的。在按钮的单击事件处理程序中,将焦点赋予表单:this.Focus();这样,焦点就恢复到窗体上,因此窗体会监听按键事件。编辑正如您所发现的,真正的问题是箭头键不被视为回车键。要解决此问题,您需要创建一个新类来继承您要使用的控件。然后,覆盖IsInputKey方法以将箭头键视为输入键。点击此链接:http://bytes.com/topic/c-sharp/answers/517530-trapping-arrow-keys-usercontrol。这篇文章也很有用:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.isinputkey.aspx。根据SimpleCoder,我必须覆盖Button类的IsInputKey成员。公共类ControlButton:Button{protectedoverrideboolIsInputKey(KeyskeyData){if(keyData==Keys.Up){returntrue;}elseif(keyData==Keys.Down){returntrue;}elseif(keyData==Keys.Left){returntrue;}elseif(keyData==Keys.Right){returntrue;}else{returnbase.IsInputKey(keyData);然后我需要使用这个新类来实例化我的按钮对象(在设计器类中),如下所示:privateControlButtonbtnDown;私有ControlButtonbtnRight;私有控制按钮btnLeft;私人控制按钮btnUp;this.btnDown=newControlButton();this.btnRight=newControlButton();=新的控制按钮();this.btnLeft=newControlButton();接下来,我为每个新按钮对象注册了OnClick处理程序,如下所示:this.btnUp.Click+=newSystem.EventHandler(this.btnUp_Click);privatevoidbtnUp_Click(objectsender,EventArgse){MessageBox.出现”);}(等等。)并为主窗体注册了一个KeyDown处理程序:this.KeyDown+=newSystem.Windows.Forms.KeyEventHandler(this.frmUavController_KeyDown);privatevoidfrmUavController_KeyDown(objectsender,KeyEventArgse){if((e.KeyCode==Keys.Up)||(e.KeyCode==Keys.W)){btnUp.PerformClick();}elseif((e.KeyCode==Keys.Down)||(e.KeyCode==Keys.S)){btnDown.PerformClick();}elseif((e.KeyCode==Keys.Left)||(e.KeyCode==Keys.A)){btnLeft.PerformClick();}elseif((e.KeyCode==Keys.Right)||(e.KeyCode==Keys.D)){btnRight.PerformClick();将主窗体属性KeyPreview设置为true,看到我已经覆盖了Up、Down、Left和Right键的默认行为,按钮控件不再循环焦点,而是返回true,将控制权转移回主窗体.从这里开始,如果按下后续键(向上、向下、向左或向右),窗体将运行相应的处理程序。使用Control.GetNextControl和SetFocus返回它。请参阅KeyPreview属性。http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx将其设置为true。或者,您可能希望覆盖ProcessKeyPreview。以上就是C#学习教程的全部内容:基础WinFormKeyDown事件处理分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
