65.9K
CodeProject 正在变化。 阅读更多。
Home

用户控件上的默认按钮

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.57/5 (3投票s)

2009年5月22日

CPOL

1分钟阅读

viewsIcon

28460

如何在用户控件上创建一个默认按钮,或者模拟一个 AcceptButton。

引言

在设计窗体时,AcceptButtonKeyPreview 属性对于自动化响应用户的操作(例如按下 Enter 键、ESC 键等)非常有用。 当您创建自己的用户控件时,这些属性是不可用的。 至少,不是直接可用的。

背景

使用 Windows 内置的消息传递系统可以帮助我们解决这个问题。

这就是我们要做和编写的代码

我们想要实现的目标是,当用户按下我们想要响应的键时,能够收到通知。 例如,您设计了一个搜索对话框用户控件,就像 Windows 资源管理器中的文件搜索一样。 当用户按下 Enter 键时,搜索应该开始。 为了确定按下的键,您可以为每个子控件使用 _KeyUp 事件,这会使代码看起来很糟糕,而且绝不是一种干净的编程风格。 这就是我们的用户控件 KeyPreview 功能发挥作用的地方。 为了在用户控件级别实现键验证,我们使用 .NET 框架的 UserControl 基类实现的函数 ProcessKeyPreview。 要控制它,只需在类级别声明对其的 **重写** 即可。

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

摘要

使用这种技术,您可以为用户控件的消费者提供类似窗体类的功能。 您甚至可以实现一个名为 AcceptButtonCancelButton 的属性,以提供更大的灵活性。

© . All rights reserved.