允许开发者为控件设置访问键

在 Label 控件和 CommandButton 控件的标题处添加 & 符号即可为它创建访问键,这样,应用程序的最终用户就可以利用它把焦点转移到该控件上。ActiveX 控件中也可以实现同样的效果。

例如,假设您创建了一个用户绘制控件。在按钮的 Caption 属性的 Property Let 中,可以检查用户输入的标题的文本。如果某个字母前有 & 符号,那么就把该字母赋给 UserControl 对象的 AccessKeys 属性。

当最终用户按下以这种方式设置的某个访问键时,UserControl 对象就会收到一个 AccessKeyPress 事件。该事件的参数为按下的访问键,这样同一个控件就能支持多个访问键。

控件组合的访问键

控件组合中可以包含能得到焦点的子控件,并支持各自的访问键。可以利用这一点来提供访问键功能。

假设您制作了由单个文本框和单个标签组成的通用控件;您希望用户能够为标签的标题设置访问键,并能够把焦点前移到文本框。为此,需要将标签和文本框的 TabIndex 的值分别设置为 0 和 1(在控件外,UserControl 上的 TabIndex 的值是不可见的),并把控件的 Caption 属性委派给标签来实现,如下例所示:

Property Get Caption() As String
   Caption = Label1.Caption
End Property

Property Let Caption(NewCaption As String)
   Label1.Caption = NewCaption
   PropertyChanged "Caption"
End Property

当开发者把文本“&Marsupial”赋予 Caption 属性时,标签控件完成与访问键有关的全部工作。

注意 当最终用户按下某个子控件的访问键时,UserControl 不会接收到 AccessKeyPress 事件。

固定文本的控件组合

对于固定用途的控件组合,诸如 Address 控件,可以把 & 符号放在子控件的标题中。不幸的是,这种硬编码的访问键可能会与用户在窗体上设置的访问键冲突。

对上述方案可以进行稍微复杂点的改进:可以为相应的子控件在控件中添加一个 AccessKeyXxxx 属性。例如,如果 txtLastname 控件对应的标签控件的标题为“Last Name”,就可以为它添加一个 AccessKeyLastName 属性。使用控件的开发者可以把标签标题上的任何字符赋与该属性,在 Property Let 代码中,为了包含 & 符号,需要修改标题。