在 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 代码中,为了包含 & 符号,需要修改标题。