定制Visual Basic.NET控件编程之拦截击键动作


  一、 简介

  首先,本文 假如你已经 相熟VB.NET和Visual Studio.NET Windows表单设计器 。

  在开发定制Windows表单控件时,提供我们自己的下拉框类型编辑器来操作控件的属性 一般是十分容易的 。定制的类型编辑器不只 可以提供更为 丰硕的设计时刻体验,而且可能成为消费者是不是喜爱你的控件的决定因素 。

  假如你决定 缔造你自己的下拉式类型编辑器,那么它应该遵照与内置的下拉框类型编辑器相 类似的模式 。让我们以Anchor属性为例 。一种典型的操作该属性的设计时刻消费者交互 形容如下:

  · 消费者 取舍属 性格子中的Anchor属性而且点击属 性格右边的下拉按钮 。

  · 一种良好的图形控件是下拉框,它 可以同意消费者 使用鼠标点击边缘或者 使用箭头键来高亮某个边缘并 使用空格键 取舍/ 取缔 取舍它 。

  · 消费者 可以通过按下ENTER键或点击下拉控件的外部来 接纳 变迁 。为了 取缔这一 变迁,消费者 可以按下ESC键 。

  下面,让我们来 探讨具体的实现技术 。

  二、 实现

  首先,让我们构建一个ResourceImageEditor类型编辑器,它同意从目前文件系统中 取舍一个图像文件(就象内置的ImageEditor类一样)或者从一个程序集的manifest文件中 取舍一个图像资源 。而且,在消费者体验方面,该ResourceImageEditor的行为应该 类似于系统内置的类型编辑器 。下面是对我们要求的概述:

  1. 当消费者 附属 性格子中 取舍一个属性时,该格子就会显示出来—以一个下拉框UI 模式显示 可以编辑的属性 。

  2. 当点击下拉按钮时,目前程序集中的全部图像资源将显示出来 。

  3. 当消费者 取舍一个图像资源项,相应的图像即 可以从程序集中进行加载 。

  4. 同意 取舍一个图像文件,而且在下拉列表框中的最终一项将标记为“Browse...” 。当消费者点按“Browse...”项,将显示经典的 打开文件对话框,消费者 可以从中 取舍一个图像文件 。

  5. 通过单击鼠标或 使用箭头键高亮某项并按回车键实际 取舍它从而同意消费者从该下拉列表框中 取舍一项 。这个下拉 取舍 可以通过按下ESC键 取缔 。

  ResourceImageEditor是一个类型编辑器, 因此它直接或 直接地派生自System.Drawing.Design.UITypeEditor类 。我决定从内置的System.Drawing.Design.ImageEditor类进行派生是由于它已经实现了图像文件 取舍 性能 。也便是说,ImageEditor.EditValue实现将显示一个文件 打开对话框以同意消费者从文件系统中 取舍一个图像文件 。 而后,从我的派生类中调用这一 性能 惟独求 容易地调用MyBase.EditValue即可 。

  为了实现上面第一个要求(在属 性格子中显示下拉箭头按钮),我必须重载GetEditStyle 步骤以从

UITypeEditorEditStyle枚举中返回适当的常数:

Public Overloads Overrides Function GetEditStyle( _

ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle

 Return UITypeEditorEditStyle.DropDown

End Function

  为了显示图像资源列表,我必须列举一个给定程序集中的全部资源而且仅在列表中显示图像资源 。为了简化,我决定 使用一种 容易的约定:当一个资源名以一个有效图像文件 扩大名(.bmp,.jpg,.gif...) 完毕时,我们就认为这是一种图像资源,而且把它包含到该下拉列表框中 。而且,我 使用图像资源名的 集中来填充这个下拉ListBox控件,后面详预以详述 。