一、引言 伴随Visual Studio 2005新加入大量的控件(或增强控件), Windows 表单应用程序的 开发 越来越简单。但是,有些情况下,你仍然需要使用更新" name="description" />

探讨.NET 2.0定制控件和用户控件开发(1)

发表于:2007-06-11来源:作者:点击数: 标签:
MI LY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 一、引言 伴随Visual Studio 2005新加入大量的控件(或增强控件), Windows 表单应用程序的 开发 越来越简单。但是,有些情况下,你仍然需要使用更新

MILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一、引言

伴随Visual Studio 2005新加入大量的控件(或增强控件),Windows表单应用程序的开发越来越简单。但是,有些情况下,你仍然需要使用更新的功能来进一步增强现有控件—很典型的一个例子就是TextBox控件。我们知道,TextBox控件允许用户把数据输入到应用程序中,但是自身并没有提供任何类型的校验(例如校验输入的数据是一个电子邮件地址)和输入过滤(例如限制输入内容仅为数字型)功能。为此,你需要对每一个TextBox控件编写自己的定制校验和过滤逻辑。显然,当需要在工程中大量地应用这种控件时,需要相当多的重复工作量。

解决这类问题的一种较好的方案就是对内置控件进行扩展—一旦创建这样的增强控件,那么它们的使用思路同原先基本一样,却“悄悄”地加入了我们需要的增强功能。

在本文中,我将使用一个具体的示例—TextBox控件—向你展示如何扩展Windows表单控件。通过扩展TextBox控件,它将实现如下功能:

◆通过过滤限制数据输入—你可以指定用户输入的有效数据类型(例如数字型,字符型或数字字母的组合)。

◆控制大小写—你可以指定输入数据的大小写形式。

◆ 对显示精度进行格式化—你可以指定输入的数字以一位,两位或三位小数形式显示。

◆定制校验—你可以使用正则表达式执行定制校验(例如校验社会安全保险号,邮政编码或电子邮件地址)。

在本文后面部分,我们将讨论如何把多个Windows表单控件结合成单个控件(也即是一个“用户控件”)的问题。

【注】本文源码的调试环境为:Windows XP Professional+Visual Basic.NET 2005。

 

二、扩展Windows表单控件

 

启动Visual Studio 2005,创建一个新的Windows应用程序并命名为WindowsControls。在本示例中,这个Windows应用程序工程将用作后面我们将扩展的控件的宿主。现在,在当前方案中添加一个新的类库工程(文件|添加|新建项目…),并命名此工程为EnhancedTextBox。

 

为了在这个工程中扩展一个Windows表单控件,我们需要添加对System.Windows.Forms命名空间的引用(右击“解决方案资源管理器”中的EnhancedTextBox工程名,然后选择“添加引用…”)。随后,导入下列命名空间:

 

Imports System.Windows.Forms

Imports System.ComponentModel

 

接下来,我们定义几个枚举类型,以用于控制大小写,输入内容过滤以及不同的显示精度:

 

Imports System.Windows.Forms

Imports System.ComponentModel

Public Enum Cases

Mixed

UpperOnly

LowerOnly

End Enum

Public Enum FilterTypes

None

IntegerNumeric

DecimalNumeric

AlphabetsOnly

Alphanumeric

End Enum

Public Enum Precisions

None

OneDecimal

TwoDecimal

ThreeDecimal

End Enum

 

因为我们是在扩展TextBox控件,所以必须从System.Windows.Forms.TextBox下派生EnhancedTextBox类:

 

Public Class EnhancedTextBox

Inherits System.Windows.Forms.TextBox

'---接下来声明成员变量……

 

现在,我们可以声明成员变量以便存储过滤类型,控制大小写,精度,以及用户设置的正则表达式。此外,我们还要定义一个事件,以便当校验失败时,控件用户能够恰当地做出响应:

 

 _

Public Class EnhancedTextBox

Inherits System.Windows.Forms.TextBox

'---实现过滤的成员变量---

Private _filterType As FilterTypes = FilterTypes.None

Private _casing As Cases = Cases.Mixed

Private _precision As Precisions = Precisions.None

'---用于实现正则表达式校验的成员变量---

Private _regex As StringPrivate _regexErrMsg As String

'---处理错误的事件处理器---

DescriptionAttribute("错误事件处理器。")> _

Public Event Err(ByVal str As String)

注意,在上面的代码中,我使用一个DefaultEvent属性把Err标识为缺省的出错事件处理器。而且,我还使用Category属性来标识Err事件,从而把它与属性窗口中的定制属性加以关联(后面,我们将详细讨论之)。另外,DescriptionAttribute指出针对这个事件的描述信息。


共5页: 1 [2] [3] [4] [5] 下一页

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
...