介绍 在设计表单时,属性AcceptButton和KeyPreview对于自动响应用户操作(如按Enter-key, ESC-key等)非常有用。当您创建自己的用户控件时,这些属性不可用。至少,现在还不是时候。 背景 使用Windows内置的消息传递系统可以帮助我们解决这个问题。 这就是我们的工作和编码 我们必须实现的一点是,当用户按下我们想要作出反应的键时,我们要得到通知。比如说,你设计了一个搜索对话框用户控件,就像Windows资源管理器中的文件搜索一样。当用户按下Enter-key时,搜索应该开始。为了确定按下的键,可以为每个子控件使用_KeyUp-event,这使得代码看起来很糟糕,而且不是干净的编程风格。这就是我们的用户控件键预览功能的作用。要在用户控件级别上实现键验证,我们使用. net框架的UserControl基类实现的函数ProcessKeyPreview。要获得对它的控制,只需在类级别上声明对它的重写。 隐藏,复制Code
Public Class myUserControl Public Event onEnterKey(ByVal sender As System.Object, ByVal e As System.EventArgs) Public Event onF4(ByVal ControlName As String) Private Const WM_KEYDOWN = &H100 Protected Overrides Function ProcessKeyPreview(ByRef m As _ System.Windows.Forms.Message) As Boolean If m.Msg = WM_KEYDOWN Then Select Case m.WParam.ToInt32 Case ConsoleKey.Enter RaiseEvent onEnterKey(button01, New System.EventArgs) Case ConsoleKey.F4 RaiseEvent onF4(MyBase.ActiveControl.Name) End Select End If Return MyBase.ProcessKeyPreview(m) End Function End Class
总结 使用这种技术,您可以向用户控件的使用者提供表单类样式的功能。您甚至可以实现一个名为AcceptButton或CancelButton的属性来实现更大的灵活性。 本文转载于:http://www.diyabc.com/frontweb/news907.html