winform Control与UserControl的区别

转载 2016年08月31日 10:52:39

作为创建控件的起点,有两个类分别用于不同的情况。理解这两个类的结构,有助于确定什么场合应使用哪个类。

 

1、Control类

Control类包含在System.Windows.Forms名称空间中,其基本功能包括:在屏幕上定义一个矩形区域,给它提供一个句柄,处理常规的系统消息。这样,Control类就可以处理用户通过键盘和鼠标输入的信息。Control类可以用作组件的基类,这些组件需要在Win32类型的图形界面上可视化地显示出来。除了内置控件和从Control类派生的控件外,Form类归根结底也是从Control类派生的。

除了这些低层次的窗口显示功能之外,Control类也包含像Font、ForeColor、BackColor和BackGroundImage这种与可视化有关的属性。Control类还有其他用于管理控件在窗体上的布局的属性,例如Docking属性和Anchoring属性。

Control类不包含任何在屏幕上显示的逻辑,但可以指定背景色或显示背景图像。它不包含任何输入处理逻辑,但提供了对键盘和鼠标的访问,可以生成标准的控件事件,如Click和KeyPress。开发人员在根据Control类创建自定义控件时,除了Control类提供的基本功能之外,还必须提供所有这些功能。

Control类提供了一组标准的事件,包括单击(Click、DoubleClick)事件、按键事件(KeyUp、KeyPress、KeyDown)、鼠标事件(MouseUp、MouseHover、MouseDown等)以及处理拖放操作的事件(DragEnter、DragOver、DragLeave、DragDrop)。另外,还有管理控件中焦点和验证的标准事件(GotFocus、Validating、Validated)。

 

2、UserControl类

对于从头创建的控件来说,Control类的内置功能是很重要的基础,这些新控件带有自己的显示和键盘处理逻辑。然而,Control类不用作其他控件的容器。

这意味着复合控件不能使用Control类作为起点。复合控件组合两个或两个以上的现有控件,因而起点必须是能管理被包含的控件。满足这种需求的类是UserControl。因为它最终从Control类派生,所以具有该类的所有属性、方法和事件。

然而,UserControl类并不直接从Control类派生。它从ContainerControl类派生,ContainerControl类从ScrollableControl类派生。

顾名思义,ScrollableControl类支持滚动控件窗口的客户区。这个类中几乎所有的成员都与滚动相关。例如,AutoScroll用于打开或关闭滚动,像AutoScrollPosition这样的控制属性用于获取和设置可滚动区域中的位置。

ContainerControl类从ScrollableControl派生,并增加了支持和管理子控件的功能。它管理焦点和控件之间的跳转能力。它的属性有ActiveControl,用于指向带焦点的控件;以及Validate,用于验证最近修改的、没有引发其验证事件的控件。

ScrollableControl和ContainerControl通常都不能直接继承。但它们增加的功能是其更常用的子类Form和UserControl所需要的。

UserControl类能够包含其他的子控件,但是UserControl的界面不会显示这些子控件。UserControl的界面用于给外面的客户显示一个单独、统一的界面,例如窗体或容器控件。任何需要访问子控件的对象界面必须在自定义控件中实现。

C#的自定义控件

C#的UserControl让用户自定义控件容易了很多,创建WindowsFormsControlLibrary工程,自定义UserControl,生成的.dll加入到任何新工程,就能在新工程中使用自...
  • u010153703
  • u010153703
  • 2014年08月06日 22:43
  • 1813

UserControl自定义控件系列一:Label+TextBox组合控件

分享本人对UserControl自定义控件的研究,主要针对多个控件组合为一个控件,展示控件显示风格的与众不同,我还没真正成为一位程序员,纯属业余,不过我具备了程序员一样的特点--很懒,写一些小程序供自...
  • jsjyyjs07
  • jsjyyjs07
  • 2014年01月20日 22:07
  • 12466

c# winform usercontrol用户控件传值

  • 2014年06月06日 13:36
  • 45KB
  • 下载

WinForm_关于用户控件和自定义控件

转自:http://blog.sina.com.cn/s/blog_3f39ffb50100d5hu.html 1.WinForm中的用户控件继承自 UserControl,主要用于...
  • threadroc
  • threadroc
  • 2016年07月19日 11:46
  • 1030

Winform自定义控件—Button(上)

在开发中用的最多的相信就是Button控件,但是Button本身是在是太丑陋了,自己还背景图还会产生"黑线",为了使用方便,并且美观,我们采用迂回的方式来实现Button的效果。 在这里使用UserC...
  • wangjihuanghun
  • wangjihuanghun
  • 2016年11月11日 18:20
  • 2833

C#开发学习笔记:编写自定义Button控件的自定义事件

编写自定义Button控件的自定义事件
  • JustWantToFly
  • JustWantToFly
  • 2016年07月19日 18:52
  • 3209

C#的自定义button

button按钮在disable状态下,字体为黑色,设置前景色无效。为解决该问题,自定义一个button,带图标。 using System; using System.Collections.G...
  • ypchen001
  • ypchen001
  • 2015年11月30日 20:39
  • 1766

C#自定义控件UserControl在工具箱中没有显示的解决办法

如果自定义的UserControl在工具箱中没有显示出来,可能是系统设置不自动显示自定义控件所致,按如下设置即可在工具箱中显示自定义的UserControl控件了。 工具=》选项=》Window...
  • shifeilongsuper
  • shifeilongsuper
  • 2016年02月17日 18:50
  • 967

C# 用户自定义UserControl控件使用

UserControl控件。   添加UserControl后,按照说法应该出现在ToolBox中,如果找不到,需要设置:   工具-》选项-》Windows窗体设计器-》常规-》工具箱-》AutoT...
  • GISSTAR
  • GISSTAR
  • 2011年07月12日 22:04
  • 8860

写在UserControl销毁之时

近来使用C#编程,需要在主窗体关闭之前将现在的地图中的图层的某一状态置为初始状态,而此方法又需要写在UserControl自定义控件类之中。 但是在继承UserControl类的事件里,却找不到合适...
  • freeWayWalker
  • freeWayWalker
  • 2012年07月18日 07:36
  • 9456
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:winform Control与UserControl的区别
举报原因:
原因补充:

(最多只允许输入30个字)