C# Window form 自定义控件的结构和设计

C# Window form 自定义控件的结构和设计

一、实现自定义控件需要考虑以下几个方面:

1.属性。

2.焦点和焦点提示。

3.事件。事件可以在Winform中的任何位置被触发,而且在一些特殊点上,我们可以自定义自己的事件来代替Microsoft定义的事件。

4.派生自现有的控件。从一个现有的Windows Form控件中派生自定义控件,这就可以使我们在标准控件中添加自定义功能。

5.用户控件。

二、首先,我们先来说一下C#中两组比较:一是:组件和自定义控件和的比较;二是:自定义控件和用户控件的比较。

1.组件(Component):组件是指可重复使用并且可以和其他对象进行交互的对象。实现了接口 System.ComponentModel.IComponent的类,或者是从该类或其他实现了 IComponent 接口的类派生的类。组件可以被重用,可以包含在容器。可以创建没有用户界面的组件,也可以创建具有用户界面的组件。**

2.**自定义控件:**是一个特殊类型的组件。继承自 Control,主要用于开发windows控件的最基本的类,比如 Text,Button 控件。就是直接从System.Windows.Forms.Control类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。

3.**用户控件:**继承自 UserControl,主要用于开发 Container 控件,Container控件可以添加其他Controls控件。

三、其次介绍一下组件的一些特性:

1.封装:一个组件封装了一个抽象和相关功能集。

2.接口:一个组件有一个清晰和具体的编程接口。

3.属性:使组件的用户能够已说明性的方式来配置组件。

4.继承:继承一个现有控件,继承时修改部分行为,继承其余行为。

5.自我检测:组件用户可以使用这种机制以编程的方式来发现组件的接口是什么。

6.状态:当实例化一个组件时,它保持我们实例的状态,而且我们可以通过接口操作状态。

7.连续性:当一个组件用于IDE时,而且用户以某种方式进行了配置,我们需要一种机制来保存组件的状态。

8.可插性:接口与实现的分离允许我们在运行时插入一个或者一些组件以实现期望的功能。

10.打包和发布:组件通常由类、图标、位图等组成。

11.许可:一项成功的组件技术需要一些许可。

注意:在.NET Framework中,我们创建的任意组件都必须实现System.ComponentModel.IComponent接口,或者继承实现此接口的类。总的来说,我们不能自己来实现IComponent接口,但可以直接或间接的继承Component类。注意:System.Windows.Forms.Form间接的从Component派生而来。

四、自定义控件的介绍

自定义控件是具有可视化特征的组件,它将成为用户接口的一部分,并在设计窗口中配置。所有自定义控件都是组件,反之并不成立。

有3种基本类型的自定义控件:

(1)**从头创建的自定义控件。**通常是指从System.Windows.Forms.Controls派生而来的控件。

说明:从头创建的自定义控件最为灵活,但工作量很大。从头创建控件时,需要负责控件的绘制,此外还可能需要处理特殊的事件,如鼠标和键盘事件。

(2)派生自现有Windows Form 控件的自定义控件。例如从System.Windows.Forms.TreeView派生出的TreeView.

说明:派生自现有Windows Form 控件的自定义控件,通常不需要考虑绘图操作(基类会处理这些操作)。基类也会处理鼠标、键盘等大部分事件。这种类型的自定义控件的基类是现有的控件类。

(3)由两个或者多个Windows Form控件复合而成的自定义控件。这样的控件被称为用户控件。通常由System.Windows.Forms.UserControl派生而来。

说明:通过两个或者多个控件来创建一个自定义控件,称为组成控件,可以根据控件的相对位置来安置组成控件。

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值