用户控件上的默认按钮

介绍 在设计表单时,属性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

原文地址:https://www.cnblogs.com/Dincat/p/13456169.html