知识大全 定制VB.NET控件编程之拦截击键动作

Posted

篇首语:我走在逃离命运的路上,却与命运不期而遇。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 定制VB.NET控件编程之拦截击键动作相关的知识,希望对你有一定的参考价值。

定制VB.NET控件编程之拦截击键动作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 简介  首先 本文假定你已经熟悉VB NET和Visual Studio NET Windows表单设计器   在开发定制Windows表单控件时 提供我们自己的下拉框类型编辑器来操作控件的属性常常是非常方便的 定制的类型编辑器不仅可以提供更为丰富的设计时刻体验 而且可能成为用户是否喜欢你的控件的决定因素   如果你决定创建你自己的下拉式类型编辑器 那么它应该遵循与内置的下拉框类型编辑器相类似的模式 让我们以Anchor属性为例 一种典型的操作该属性的设计时刻用户交互描述如下   · 用户选择属性格子中的Anchor属性并且点击属性格右边的下拉按钮   · 一种良好的图形控件是下拉框 它能够允许用户使用鼠标点击边缘或者使用箭头键来高亮某个边缘并使用空格键选择/取消选择它   · 用户可以通过按下ENTER键或点击下拉控件的外部来接收变化 为了取消这一变化 用户可以按下ESC键   下面 让我们来讨论具体的实现技术 二 实现  首先 让我们构建一个ResourceImageEditor类型编辑器 它允许从当前文件系统中选择一个图像文件(就象内置的ImageEditor类一样)或者从一个程序集的manifest文件中选择一个图像资源 而且 在用户体验方面 该ResourceImageEditor的行为应该类似于系统内置的类型编辑器 下面是对我们要求的概述    当用户从属性格子中选择一个属性时 该格子就会显示出来—以一个下拉框UI形式显示可以编辑的属性    当点击下拉按钮时 当前程序集中的所有图像资源将显示出来    当用户选择一个图像资源项 相应的图像即可以从程序集中进行加载    允许选择一个图像文件 并且在下拉列表框中的最后一项将标记为 Browse 当用户点按 Browse 项 将显示经典的打开文件对话框 用户能够从中选择一个图像文件    通过单击鼠标或使用箭头键高亮某项并按回车键实际选择它从而允许用户从该下拉列表框中选择一项 这个下拉选择可以通过按下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 DropDownEnd Function  为了显示图像资源列表 我必须列举一个给定程序集中的所有资源并且仅在列表中显示图像资源 为了简化 我决定使用一种简单的约定 当一个资源名以一个有效图像文件扩展名( bmp jpg gif )结束时 我们就认为这是一种图像资源 并且把它包括到该下拉列表框中 而且 我使用图像资源名的集合来填充这个下拉ListBox控件 后面详预以详述   开始时 被枚举以查询图像资源的程序集就是包含ResourceImageEditor类的程序集 然而 我们可以通过把ResourceImageEditor ResourceAssembly属性设置为任何有效的System Reflection Assembly参考来改变它   当用户从列表框中选择一个图像资源名时 该图像应该即可从给定的程序集中的manifest文件中加载 这是在LoadResourceImage方法内实现的 Private Function LoadResourceImage(ByVal resourceName As String) As ImageDebug Assert(Not resourceName Is Nothing) Dim ImageStream As System IO Stream = Me ResourceAssembly GetManifestResourceStream(resourceName) Return System Drawing Bitmap FromStream(ImageStream)End Function  下拉用户接口是通过在重载的EditValue方法内动态地创建和填充一个ListBox控件实现的 编辑器也处理由ListBox生成的Click和KeyDown事件 因为这是拦截ENTER和ESC键所必需的 下列伪码显示了在EditValue方法中的实现逻辑

   Public Overloads Overrides Function EditValue( ) 存储上下文信息以用于下拉ListBox事件处理器 创建并使用可用的图像资源名填充该ListBox 添加我们的特殊 Browse 项 绑定ListBox事件 在一个下拉窗口中显示该ListBox End Function

cha138/Article/program/net/201311/11427

相关参考

知识大全 如何用VB.NET Timer控件按设定的间隔完成动作

如何用VB.NETTimer控件按设定的间隔完成动作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 VB.Net编程入门之Hello World(1)

VB.Net编程入门之HelloWorld(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 VB.Net编程入门之Hello World(2)

VB.Net编程入门之HelloWorld(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 VB.Net编程入门之Hello World(4)

VB.Net编程入门之HelloWorld(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 VB.Net编程入门之Hello World(3)

VB.Net编程入门之HelloWorld(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 如何轻松调整VB.NET控件

如何轻松调整VB.NET控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Anchor属性可以

知识大全 VB.NET中的TextBox控件详解

VB.NET中的TextBox控件详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!TextBox

知识大全 vb.net入门——DomainUpDown 控件的使用

vb.net入门——DomainUpDown控件的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 vb.net中TreeView控件的使用

vb.net中TreeView控件的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在中Tr

知识大全 如何应用VB.NET MonthCalendar控件

如何应用VB.NETMonthCalendar控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&