winform制作⾃定义控件(⼊门)
与原⽂基本⼀致,只是例⼦变成VS2012环境,语⾔采⽤博主常⽤的VB.NET
⼀ 、概述
Windows 窗体控件是可再次使⽤的组件,它们封装了⽤户界⾯功能,并且可以⽤于客户端 Windows 应⽤程序。“Windows 窗体”不仅提供了许多现成控件,还提供了⾃⾏开发控件的基础结构。可以组合现有控件、扩展现有控件或创作⾃⼰的⾃定义控件。Windows 窗体控件是从 System.Windows.Forms.Control 直接或间接派⽣的类。以下列表描述了开发 Windows 窗体控件的常见⽅案:
组合现有控件来创作⼀个复合控件。
复合控件封装有⼀个可以作为控件重复使⽤的⽤户界⾯。可视化设计器为创建复合控件提供了有⼒的⽀持。要创作⼀个派⽣⾃
System.Windows.Forms.UserControl 的复合控件。基类 UserControl 为⼦控件提供了键盘路由并使⼦控件可以作为⼀个组进⾏⼯作。
·  扩展现有控件,对其进⾏⾃定义或为其添加功能。
可以通过从任何 Windows 窗体控件派⽣控件并重写或添加属性、⽅法和事件的⽅式来⾃定义 Windows 窗体控件。
· 创作⼀个不是通过组合或扩展现有控件⽽形成的控件。
在这种⽅案中,需从基类 System.Windows.Forms.Control 派⽣控件。可以添加和重写基类的属性、⽅法和事件,来制作功能强⼤,能满⾜⾃⼰需求的控件。
Windows 窗体控件的基类 System.Windows.Forms.Control 为客户端 Windows 应⽤程序中的外观显⽰提供了所需的途径。Control 提供了⼀个窗⼝句柄,⽤来处理消息路由并提供⿏标和键盘事件及许多其他⽤户界⾯事件。还提供了⾼级布局,并具有⽤于外观显⽰的特定属性,如 ForeColor、BackColor、Height、Width 和许多其他属性。此外,它还提供了安全性、线程⽀持以及与 ActiveX 控件的交互性。由于基类提供了很多基础结构,使得开发⾃⼰的 Windows 窗体控件变得相对简单。
⼆、编写简单的⾃定义控件
2.1、简单控件例⼦
下⾯的⽰例创建⼀个简单控件,该控件通过处理 Paint 事件显⽰其 Text 属性的值。为了创建此控件和处理事件,必须创建⼀个从 Control 继承的类,并创建⼀个重写 OnPaint ⽅法的⽅法。
Public Class HelloWorldControl
Inherits System.Windows.Forms.TextBox
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim rect As RectangleF = New RectangleF(ClientRectangle.X,
ClientRectangle.Y,
ClientRectangle.Width,
ClientRectangle.Height)
e.Graphics.DrawString(me.Text, Font, New SolidBrush(ForeColor), rect)
End Sub
End Class
2.2、我们在VS2012中创建⾃定义控件的步骤:
1. 打VS2012,⽂件/新建/项⽬。
2. 出现“新建项⽬”对话框,然后⼊下图所⽰选择。
3. 单击“添加”,这时⼀个⾃定义控件⼯程已经建成,⽣成⼀下,就制作了⼀个简单的⾃定义控件,只不过没有任何功能。
4. 向新⽤户控件添加任何标记和控件,并为该⽤户控件添加执⾏的所有任务(例如,处理控件事件或从数据源读取数据)添加代码。
*博主在这⾥并不清楚应该选择那种⼯程姑且选择如下
博主并不精通.Net,但博主⽤此种⽅法⽣成,发现在\bin\Debug⽂件夹下⽣成了dll,这也正是博主需要学习的
2.3、检查控件的设计时⾏为
1. 启动 VS2012。
2. 通过从“⽂件”菜单单击/新建/项⽬/Windows应⽤程序,此时有⼀个默认窗体,博主就⽤这个默认窗体来试验。
3. “⼯具/选择⼯具箱项…”,在弹出的“选择⼯具箱项”对话框中点下⾯的浏览按钮选择要使⽤控件的 DLL;确定后,该控件出现在⼯具箱的底部。
4. 选择该控件并将其添加到窗体中。将看到该控件出现在窗体上。
activex 控件5. 如果从上⼀个⽰例添加控件,您将注意到即使如此简单的控件都具有⼀整套属性和⼴泛的设计时⾏为。此默认⾏为是从 Control 类继承的。
到刚才编译好的dll,
⾄此博主已经知道⾃⼰想知道的,所有原⽂后半部内容不再复述
1:选择Windows窗体控件库,就可以将项⽬编译成dll,dll中有控件2:如何将编译好的dll放进⼯具箱

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。