Visual Studio .NET 2002.NET 1.0Windows 2003Windows 2000Windows XPIntermediateDevVisual StudioWindows.NETC#
扩展用户控件和 IDE/VS.NET 工具箱





4.00/5 (11投票s)
2003年8月28日
4分钟阅读

69468

1070
扩展用户控件和 IDE 工具箱
引言
这是什么?
ctxtbx
继承自TextBox
(System.Windows.Forms
)。控件扩展:如果文本框中的字符串长度 (ctxtbx.Text.Length
) 超过指定字符数 (ctxt.FlashLength
),则文本框开始闪烁,以指示用户输入的字符串无效(过长)。- 本项目旨在演示以下内容
- 通过委托和事件扩展用户控件。
- 将自定义控件添加到工具箱。通过属性浏览器访问控件属性。
- 该控件打包在单个 DLL 中。任何 .NET/WIN32 客户端都可以使用它。
- 应用程序说明 提供了将此模块部署到 C#/VB.NET 客户端所需的信息。请注意,RAD 工具仅适用于 C#/VB.NET。如果您打算在托管的 C++/COM/WIN32 客户端中使用此程序包,应用程序说明中提供的过程并不直接适用。
- 本教程的前提条件:C#/VB.NET、Windows Forms、UEM(统一事件模型)。对以下主题有深入的理解将有所帮助,但并非完全必要:程序集、强名称、PPK、GAC。
应用程序说明
将模块安装到GAC
(全局程序集缓存)- 密钥文件:
txtbxlib.snk
(此步骤已完成。密钥文件位于您的解决方案文件夹中。)密钥文件通过 sn.exe 生成,并在AssemblyInfo.cs
中引用。对于那些不完全熟悉此过程的人,请阅读以下主题:GAC
、sn.exe
、assembly
、strong name
。供您参考,以下是命令提示符条目
sn -k txtbxlib.snk
- Visual Studio.NET 命令提示符:
gacutil -i txtbxlib.dll
(您需要自己执行此操作。)(图 5) - 将控件添加到工具箱
- 右键单击工具箱中的任意位置。(图 1)
- 选择“自定义工具箱”(图 1, 2)
- 选择“.NET Framework 组件”(图 2)
- 浏览并选择
txtbxlib.dll
(图 3)
要在 Windows 窗体中使用该控件,只需将其从工具箱拖放到窗体上。(图 1)
- 右键单击工具箱中的任意位置。(图 1)
三个控件属性
ctxtbx.FlashLength
(触发闪烁的文本框中字符串的长度。默认值:10)ctxtbx.flashColor
(闪烁颜色。默认值:System.Drawing.Color.Red
)ctxtbx.flashfreq
(闪烁频率。默认值:1)
您可以通过属性浏览器(图 4)或在 ctxtbx
类构造函数中访问这些属性。现在,选择编辑框并注意浏览器和图 6(类层次结构)。请注意,只有属性可以在“属性浏览器”下找到 - 其他类属性此处未显示。
客户端实现就到这里了,只需将控件从工具箱拖放到 Windows 窗体上。程序包中包含一个示例应用程序用于演示(SomeClient
)。在运行可执行文件之前,请确保
- 控件程序集(
txtbxlib.dll
)已安装到GAC
。 - 工具箱引用
txtbxlib.dll
txtbxlib.cs
中剪切并粘贴控件类 ctxtbx
,然后在 Windows 窗体的构造函数中实例化 ctxtbx
。请务必包含以下命名空间:System.Threading
、System.Drawing
、System.Windows
、System.Windows.Forms
和 System
架构和实现
ctxtbx
中的所有内容都打包在一个 DLL(托管 C# 类库)中:txtbxlib.dll
请注意,已将对 System.Drawing
和 System.Windows.Forms
的引用添加到解决方案中。
程序包的顶部是 txtbxlib
命名空间。ctxtbx
类是 DLL 中实现的唯一一个类。
也许解释代码的最简单方法是跟踪用户单击文本框时发生的事件序列。所以,这是
- 用户输入文本框。
OnKeyDown
事件被触发。protected override void OnKeyDown(KeyEventArgs e) { CheckLength(); base.OnKeyDown(e); }
该方法将调用 CheckLength
CheckLength
被触发。该方法在用户每次向文本框输入文本时检查ctxtbx
中的字符串长度。如果字符串长度ctxtbx.Length
超过ctxtbx.FlashLength
,则触发OutOfRangeEvent
。否则,什么也不发生。public delegate int OutOfRangeDelegate(int num); publicevent OutOfRangeDelegate OutOfRangeEvent;
现在,OutOfRangeEvent
及其处理程序之间的关联可以在构造函数中找到OutOfRangeDelegate d1 = new OutOfRangeDelegate(this.OnOutOfRange_1); OutOfRangeDelegate d2 = new OutOfRangeDelegate(this.OnOutOfRange_2); this.OutOfRangeEvent += d1; this.OutOfRangeEvent += d2;
上面的代码片段通过委托
OutOfRangeDelegate
将处理程序OnOutOfRange_1
和OnOutOfRange_2
映射到OutofRangeEvent
。- 事件处理程序被调用。
OnOutOfRange_1<CODE>
此方法启动一个线程来执行
FlashIt(..)
- 这会产生闪烁效果。OnOutOfRange_2
此方法将边框样式从
fixed-single
更改为fixed-3D
。
- 假设用户意识到她犯了一个错误并截断了字符串长度小于
ctxtbx.FlashLength
。再次,OnKeyDown
被触发。 CheckLength
依次被触发。但是,这次,由于文本框中的字符数ctxtbx.Length
小于ctxtbx.FlashLength
,因此OutOfRangeEvent
不会被触发,并且执行闪烁的线程(m_FlashThread
)将被中止。
基本上就是这样。
- 项目包:
ctxtbx.zip
ctxtbx 控件
- 项目类型:C# 类库
- 项目名称:
txtbxlib
- 二进制文件:
txtbxlib.dll
(Release 文件夹) - 密钥文件:
txtbxlib.snk
SomeClient
- 项目类型:C# Windows 应用程序
- 二进制文件:
SomeClient.exe
(您需要先将控件程序集安装到 GAC!)