C#自定义控件VS用户控件

  • 1、C#中自定义控件VS用户控件大比拼
  • 2、为自定义控件(或类)的方法属性添加注解
  • 2.1、Description:在属性窗口中添加属性及属性说明
  • 2.2、Browsable
  • 2.3、EditorBrowsable
  • 2.4、Category
    • 2.5、ToolboxBitmap
    • 2.6、DefaultEvent和DefaultProperty
  • 3、自定义用户控件设置为容器

1、C#中自定义控件VS用户控件大比拼

自定义控件与用户控件区别
WinForm中,用户控件(User Control):继承自 UserControl,主要用于开发 Container 控件,Container控件可以添加其他Controls控件
自定义控件(Custom Control):继承自 Control,主要用于开发windows控件的最基本的类,比如 Text,Button 控件

要开发自己的控件的几种方法

  • 复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。

  • 扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求。

  • 自定义控件(Custom Controls):就是直接从System.Windows.Forms.Control类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。

2、为自定义控件(或类)的方法属性添加注解

2.1、Description:在属性窗口中添加属性及属性说明

设置显示在属性窗口的描述属性功能的文字说明。
使用例子

        [Description("边框宽度"), Category("自定义")]public virtual int RectWidth{get{return this._rectWidth;}set{this._rectWidth = value;Refresh();}}

2.2、Browsable

指定属性是否应该在属性窗口中显示,使用布尔值设置。一般情况下,对于常用的和比较重要的属性设置Browsable为true,否则,设置Browsable为false。

2.3、EditorBrowsable

设置属性在编辑器中的可见性,比如设置在智能提示列表不显示或高级用户才可以看到

2.4、Category

指定属性在属性浏览器中进行分组显示的类别。
命名空间: System.ComponentModel
程序集: System(位于 System.dll)

该设计时特性帮助可视化编辑器将属性进行逻辑分组。通常分为:外观(Appearance)、行为(Behavior)、布局(Layout)、数据(Data)、操作(Action)、键盘(Key)和鼠标(Mouse)等。如果您安装的是中文版的IDE,则默认情况下中文分类和英文分类是通用的,即设置成“数据”或“Data”类别是等价的。

        [Description("边框宽度"), Category("自定义")]public virtual int RectWidth{get{return this._rectWidth;}set{this._rectWidth = value;Refresh();}}

2.5、ToolboxBitmap

实现用户自定义控件中嵌入自己的图标。

本文实例讲述了C#实现用户自定义控件中嵌入自己的图标。分享给大家供大家参考,具体如下:


具体的步骤。

  • 向资源文件是添加一张图片,图片格式可以是bm,ico 大小最好是 16 * 16 啦!

  • 选中用户控件图标,单击“右键》属性”把 “生成操作 的属性值改为:嵌入的资源(Action Resource)

[ToolboxBitmap(typeof(CutPitureNew_WPF), "CutPitureNew_WPF.ico")]
public partial class CutPitureNew_WPF : UserControl
{public CutPitureNew_WPF()
}

关键在添加这一句:

[ToolboxBitmap(typeof(MyControl), "Resources.vb6tovb7.bmp")]

2.6、DefaultEvent和DefaultProperty

指定自定义控件的默认事件和默认属性。

DefaultEventAttribute(MSDN)可以用来指定组件的默认事件,如在TestUserControl类上面加入代码

[DefaultEvent("BtnTestClick")]

那在Form编辑界面,双击控件testUserControl1就会自动进入testUserControl1_BtnTestClick事件。

这里再说明一下,C#中的System.Windows.Forms.Control类代码如下:

[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ComVisible(true)]
[DefaultEvent("Click")]
[DefaultProperty("Text")]
[Designer("System.Windows.Forms.Design.ControlDesigner, System.Design, Version=4.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
[DesignerSerializer("System.Windows.Forms.Design.ControlCodeDomSerializer, System.Design,Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a","System.ComponentModel.Design.Serialization.CodeDomSerializer, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
[ToolboxItemFilter("System.Windows.Forms")]
public class Control : Component, IDropTarget, ISynchronizeInvoke, IWin32Window, IBindableComponent, IComponent, IDisposable
{ /* ... */ }

这里可以看到DefaultEvent的值为“Click”,这也就是为什么拖入Form的按钮(Button),在双击后会进入它的Click事件:

private void button1_Click(object sender, EventArgs e)

对于不希望以Click事件作为默认事件的控件来说,要手动指定该控件的DefaultEvent特性,如复选框(CheckBox)的声明:

[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ComVisible(true)]
[DefaultBindingProperty("CheckState")]
[DefaultEvent("CheckedChanged")]
[DefaultProperty("Checked")]
[ToolboxItem("System.Windows.Forms.Design.AutoSizeToolboxItem,System.Design,Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public class CheckBox : ButtonBase
{ /* ... */ }

这里的DefaultEvent被写上了“CheckedChange”,因此在Form的编辑界面,双击复选框时默认进入的编辑事件为

private void checkBox1_CheckedChanged(object sender, EventArgs e)

自定义的控件(直接继承自UserControl),如果不添加这个属性,在编辑界面双击后进入的事件是Load事件。

类似的特性还有DefaultProperty,DefaultPropertyAttribute(MSDN)可以被用来指定组件的默认属性。指定默认属性后,当用户在Form里单击这个控件时,将在属性浏览窗口中自动选定该属性:

[DefaultProperty("BtnName")]

3、自定义用户控件设置为容器

如果编写了一个控件,这个控件上还可以容纳Button的控件,那么这个自己编写的控件必须设置为容器。

将 UserControl 放在 Windows 窗体上之后,如何将 UserControl 对象用作设计时控件容器

本分步指南介绍在将 UserControl 放在 Windows 窗体上之后,如何将 UserControl 对象用作设计时控件容器。可能会有这样的情况:您想将一个控件拖到 UserControl 中。为做到这一点, UserControl 必须用作控件容器。

概述

默认情况下,UserControl 对象只有在您创建它时才可以用作控件容器。在将 UserControl 放在 Windows 窗体上之后,为让UserControl 承载构成控件,您必须更改 UserControl 的默认设计器。如要为一个组件实现设计时服务,请使用System.ComponentModel 名称空间的 DesignerAttribute 类。DesignerAttribute 出现在类声明前面。通过传递designerTypeNameDesignerAttribute 参数初始化 designerTypeName

designerTypeName 是提供设计时服务的设计器类型的完全合格的名称。传递 designerTypeName 参数的System.Windows.Forms.Design.ParentControlDesignerSystem.Design 的组合。ParentControlDesigner 类扩展了UserControl 的设计时行为。

designerBaseType 是设计器的基类的名称。用于设计时服务的类必须实现 IDesigner 接口。

将 UserControl 创建为设计时控件容器

创建一个新的 Visual C# .NET Windows 控件库项目。为此,请按照下列步骤操作:启动 Visual Studio .NET。在“文件”菜单上,指向“新建”,然后单击“项目”。在“项目类型”下,单击 “Visual C# 项目”,然后单击“模板”下的 “Windows 控件库”。
将该项目命名为 ContainerUserControl。默认情况下将创建出 “UserControl1.cs”。
在解决方案资源管理器中,右键单击 “UserControl1.cs”,然后单击“查看代码”。
将下面的代码添加到 Declarations 部分:
 using System.ComponentModel.Design;
如下所示将System.ComponentModel.DesignerAttribute 属性应用到该控件:
  [Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))] public class UserControl1 :System.Windows.Forms.UserControl {...}
在“生成”菜单上,单击“生成解决方案”。

测试 UserControl

创建一个新的 Visual C# 项目。为此,请按照下列步骤操作:启动 Visual Studio .NET。在“文件”菜单上,指向“新建”,然后单击“项目”。在“项目类型”下,单击 “Visual C# 项目”,然后单击“模板”下的 “Windows 应用程序”。默认情况下将创建出 “Form1.cs”。
将 “UserControl1” 从工具箱(在“Windows 窗体”下)拖到 “Form1.cs”。
将一个按钮控件从工具箱拖到 “UserControl1”。
您会注意到 “UserControl1” 起到了按钮控件的控件容器的作用。

C#自定义控件VS用户控件相关推荐

  1. java 用户控件_C#自定义控件VS用户控件

    C#中自定义控件VS用户控件大比拼 1 自定义控件与用户控件区别 WinForm中, 用户控件(User Control):继承自 UserControl,主要用于开发 Container 控件,Co ...

  2. 第6章 自定义控件和用户控件

    部署 创建 内容和布局 设计期行为 性能 ASP.NET 为创建自己的控件提供了两个模型--用户控件模型和自定义控件模型.这两个模型适合不同的情况.一般而言用户控件适合创建内部,应用程序特定的控件和相 ...

  3. 用户控件和自定义控件

    关 键 词 Server Control 服务器控件 User Control 用户控件,ASP.NET服务器控件的一种(一般后缀名为.ASCX文件) Custom Control 自定义控件,ASP ...

  4. Asp.net 用户控件和自定义控件注册

    在ASPX页中注册用户控件的方法 <%@ Register Src="ListPicker.ascx" TagName="ListPicker"  Tag ...

  5. 用户控件 自定义控件_新的自定义控件:TaskProgressView

    用户控件 自定义控件 我已经编写了一个新的自定义控件,并将其提交到ControlsFX项目. 这是一个高度专业的控件,用于显示后台任务,其当前状态和进度的列表. 这实际上是我为ControlsFX编写 ...

  6. Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)...

    (一).  概要 开发<数据绑定用户控件>, 要实现一个DataSource属性, 并且能够自动识别不同的数据源, 如: ArrayList, DataTable, DataSet, XM ...

  7. 用户控件与自定义控件

    一. 用户控件: 1. 易于创建,基类为UserControl, 和.aspx页面结构几乎完全相同.      2. 运行时动态的进行编译,所以不能将其添加到工具箱中. 二. 自定义控件: 1.难于创 ...

  8. Web.config中注册用户控件和自定义控件

    在ASP.NET 的早先版本里,我们通过在页面的顶部添加 <%@ Register %> 指令来引入和使用自定义服务器控件和用户控件时,象这样: <%@ Register TagPr ...

  9. WPF 用户控件和 WPF自定义控件区别

    WPF 用户控件 将多个现有的控件组合成一个可重用的"组". 由一个XAML文件和一个后台代码文件. 不能使用样式和模板. 继承自UserControl类. WPF自定义控件(扩展 ...

最新文章

  1. 学习笔记-安装ELK5
  2. 如何在Android TV上自定义推荐行
  3. C#的变迁史01 - C# 1.0篇
  4. 陈省身数学奖获得者张继平:怎样才能学好数学?
  5. 分布式与集群(一):我眼中的分布式与集群
  6. python3怎么安装opencv_如何在Ubuntu 16.04上安装支持Python 3.x的OpenCV
  7. U盘制作“奶瓶”破解无线WPE\WPA\WPA2 密码教程
  8. python颜色校正
  9. nginx 错误Failed to start The nginx HTTP and reverse proxy server.
  10. NFC技术的定义通信方式
  11. 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  12. 1380Problem C:zyf的A+B问题
  13. 新生开始学c语言----c语言的概述
  14. MMORPG传奇类手游《空空西游》完整源码(客户端cocos2d-js+服务端pomelo+cocosStudio工程+搭建教程)
  15. 网站安全漏洞--大全
  16. WIN7系统 提示缺少msvcr120.DLL,msvcr110.DLL的 请戳这里。
  17. 计算机图形学5--绘制基本图元
  18. bios显示计算机故障,笔记本电脑BIOS出现故障怎么办 三种常见BIOS故障解决方案...
  19. 1055: 猴子吃桃
  20. win7锁定计算机快捷键6,win7锁定计算机快捷键_win10 锁定计算机

热门文章

  1. 也谈新基建,生态新思路
  2. python快速倒包_Python 基础之import导包
  3. 讨贼檄文 —— 陈琳
  4. 怎么对App进行功能测试
  5. 解决HTML框架不能显示的问题
  6. golang之defer语句
  7. Python入门教程(二)
  8. ubuntu远程桌面连接windows
  9. 用tsm动作识别训练自己的数据集
  10. 注意力机制笔记——结合沐神和B站老弓up主