WinForm用户控件和自定义控件的异同;

1.转自:http://blog.chinaunix.net/uid-20476365-id-1942444.html

复合控件是封装在公共容器内的 Windows 窗体控件的集合。这种控件有时称为“用户控件”。包含的控件称为“构成控件”。  

复合控件包含与每个包含的 Windows 窗体控件相关联的所有固有功能,允许您有选择地公开和绑定它们的属性。复合控件还提供了大量的默认键盘处理功能,您不需要任何额外的开发。  
====================================  
自定义控件  
创建控件的另一种方法是通过从 Control 继承从头开始创建一个控件。Control 类提供控件所需的所有基本功能(包括鼠标和键盘处理事件),但不提供控件特定的功能或图形界面。  

与通过从 UserControl 或现有 Windows 窗体控件继承创建控件相比,通过从 Control 类继承创建控件需要耗费更多的心思和精力。由于大量的实现将留给您进行,因此,您的控件可以具有比复合控件或扩展控件更大的灵活性,而且您可以使控件完全满足自己的需要。


2.转自:http://blog.sina.com.cn/s/blog_3f39ffb50100d5hu.html

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


1.WinForm中的用户控件继承自 UserControl,主要用于开发 Container 控件,Container控件可以添加其他Controls控件

自定义控件继承自 Control,主要用于开发windows控件的最基本的类,比如 Text,Button 控件

2.生成的用户控件添加到工具箱后默认使用一个齿轮状的图标,以下为设置自定义图标的方法:

  (如果是在类库项目中生成用户控件,默认没有资源文件,需要手动添加资源文件,此时会在项目文件下生成 Resources 文件夹以及 Resource1.resx 文件。双击 Resource1.resx 文件,选择添加资源。此时在 Resources 文件夹下可以找到添加的图标文件,右击图标文件,选择属性,将生成操作项设为嵌入的资源

  1> 准备16像素宽高,256色的BMP图片,并设置图标文件的BuildingAction(生成操作)属性为嵌入的资源

  2> 修改用户控件类,引用资源文件的图标文件:

     (用户控件类名为: myControl1)

     (System.Drawing.ToolboxBitmap)

     在类体上方添加 [ToolboxBitmap(typeof(myControl1),"Resources.B1.ico")]

WinForm用户控件和自定义控件的异同;_第1张图片

  3> 然后生成解决方案,在 bin 目录下即可找到 myControl1.dll 文件

  4> 将 dll 文件添加到工具箱中即可发现用户控件的图标已经为自定义的图标

WinForm用户控件和自定义控件的异同;_第2张图片

 

20090724 (入题)最近用到自定义圆角按钮,由于系统按钮为标准矩形,因而这里需要自定义按钮

新建项目--新建项(自定义控件)

继承 Button 类

重写 OnPaint() 方法,使用 GraphicsPath 获取一个带有圆角的矩形路径,进行一些列填充后将当前对象的区域,也就是 Region 属性赋值为带圆角的矩形路径。

WinForm用户控件和自定义控件的异同;_第3张图片

工作遇到的问题主要在于〔设计时属性〕

步骤为:

1.创建私有变量;

  private string _name;

2.创建属性;

  public string Name

  {

     get;

     set;

  }

3.为属性添加〔设计时属性〕,诸如:

[Browsable(true)]

[Category("自定义属性")]--用于在控件属性设计器中显示,此设置为对属性进行分类。由于默认不存在这个分类项,则会新建。若不设置此属性,默认新增“杂项”分类项,并将属性置于其下若要将属性置于预定的分类中,引号中间填入默认分类项即可,比如: [Category("外观")],注意这里不区分中英文,“外观”分类项同样可以写作“Appearance”。

[Description("属性描述")]--此属性用于描述属性

[DefaultValue()]--属性默认值,这里的值包含多数数据类型,但是没有枚举类型,比如 Color 类型,这时要使用第二个重载,包括两个参数,第一个为目标类型,第二个为值的字符串表示,例如:

    [DefaultValue(typeof(Color), "#000000")]
        public Color TForeColor

[DefaultEvent()]--属性默认事件

...

注意:

    属性访问器必须使用 get; set; 的格式才能在属性设计器中显示。并且,若属性访问器使用这种方式,必须 get 和 set 同时使用,不能只写某一个。

    若自定义控件源文件与引用控件的项目在同一终端上,在更新了自定义控件的源码后,保存(或重新生成)后,在引用控件的项目中,通过重新生成能够得到最新修改后的自定义控件。

使用枚举的属性:

1.定义枚举

  public enum WeekDay
 {
     Monday,
     Tuesday,
     Wednesday,
     Thurday,
     Friday,
     Thursday,
     Sunday
 }

2.使用枚举定义私有变量和属性访问器

  private WeekDay _today;

  public WeekDay Today

  {

     get;

     set;

  }

这样,在设计器中,此属性将提供枚举值的选项

WinForm用户控件和自定义控件的异同;_第4张图片

 

以下是关于 Color 类的枚举属性

WinForm用户控件和自定义控件的异同;_第5张图片


你可能感兴趣的:(C#)