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

article/2025/10/13 6:41:46

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” 起到了按钮控件的控件容器的作用。

http://chatgpt.dhexx.cn/article/51FXaBv5.shtml

相关文章

C# 自定义控件

一 自定义控件 1 自定义控件的三种方式: 1)复合控件:将标准控件组合起来 class YourControl:UserControl{}2) 扩展控件:继承于标准控件 class YourControl:Button{}3) 自定义控件:完全地自定义一个控件 class You…

C#窗体控件简介

C#窗体控件简介-选项卡控件 在Windows 应用程序中,选项卡用于将相关的控件集中在一起,放在一个页面中用以显示多种综合信息。选项卡控件通常用于显示多个选项卡,其中每个选项卡均可包含图片和其他控件。选项卡相当于多窗体控件,可…

QStackedWidget 控件

一、简介 1、QStackedWidget 控件相当于一个容器,提供一个空间来存放一系列的控件,并且每次只能有一个控件是可见的,即被设置为当前的控件。 2、常用接口函数: addWidget:向容器中添加控件setCurrentWidget&#xf…

测试会遇到的控件

我们测试一个软件,不管是C/S系统还是B/S系统,都会遇到各种各样的控件。控件是构成应用程序交互界面的基本元素,知己知彼,百战不殆,测试它们就要首先了解它们的特性。这里,我对常见的控件做一个汇总。希望大…

11. Windows应用程序常用控件

Windows应用程序常用控件 1 控件概述1.1 控件的分类及作用1.2 控件的命名规范1.2 控件的相关操作2.1 添加控件2.2 对齐控件2.3 锁定控件2.4 删除控件 3 文本类控件3.1 标签控件(Label控件)3.2 按钮控件(button控件)3.3 文本框控件…

第五章 Windows基础控件

一、 控件(类) 1,常用的控件分类及作用: 2,控件的基本操作: 1)添加、删除控件; 2)对齐控件。 注意:选择的第一个控件是主控键,其他的控件都与其对…

(3)Android常见界面控件

文章目录 3.1 简单控件的使用3.1.1 TextView控件3.1.2 EditText控件3.1.3 Button控件方法一:布局文件中指定点击事件(不常用)方法二:使用内部匿名类实现点击事件方法三:使用Activity实现OnClickListener接口全部实现代码举例 3.1.4 ImageView…

dreamweaver2020中文版

教程: 1、解压下载获得Dreamweaver 2020中文特别版,双击运行它。 2、由于其默认安装路劲为C盘系统盘,因此这里小编选择自定义。 3、选择想要安装的组件。 4、等待安装完成。 5、当向导安装结束后,点击完成。 6、最后双击桌面快捷…

Dreamweaver(Dw)2021软件下载及安装教程并创建一个网页

1.在微信搜索公众号软件星君(如图) 2. 2.点开链接找到里面的下载链接复制(要求windows10) 2、系统必须是Windows 10 64bit 3、保证电脑中有任意一款解压软件 安装步骤 1.找到下载好的安装包,并双击打开【Dw 2021 安装…

Dreamweaver 安装破解

Dreamweaver CS6 Mac破解版 发表于 2013 年 2 月 28 日 介于之前小子分享的Mac版的Adobe的PS CS6和Illustrator CS6,有用户要求小子分享下Dreamweaver,小子当然乐意效劳。 Dreamweaver CS6 是世界顶级软件厂商Adobe推出的一套拥有可视化编辑界面&#x…

Dreamweaver2021下载安装

下载路径见如下百度云盘 链接:https://pan.baidu.com/s/1mB6S0xw3KWxPnbOxfQNu7Q 提取码:k1pg 安装 我是从一个公众号学到的,里边有挺多常见工具软件以及详细安装方法。

coreldraw2021全名和序列号 cdr2021安装下载图文教程

CorelDRAW2021一套完整的专业图形设计应用程序开始正确的设计之旅,包括矢量插图、布局、照片编辑等 - 专为您选择的平台而设计。使用 CorelDRAW随时随地在 Windows 或 Mac 上制作独特的插图、广告牌、徽标等。通过 CorelDRAW与客户和同事进行协作,收集一…

Dreamweaver 安装 激活

来源地址:http://jingyan.baidu.com/article/e75aca8575e076142fdac65d.html 怎么安装和激活Dreamweaver cs6详细教程 1 安装Dreamweaver cs6之前,大家要从官网下载Dreamweaver cs6软件,这里我就不介绍怎么下载了。下载后解压压缩包&#xff…

dw怎样用css设置背景图片,dreamweaver

dreamweaverCSS使用教程:定义CSS样式背景属性 背 景 属 性 【定义 CSS 样式背景属性】使用“CSS 样式定义”对话框的“背景”类别可以定义 CSS 样式的背景设置。可以对网页中的任何元素应用背景属性。例如,创建一个样式,将背景颜色或…

CorelDRAW2021标准版 序列号授权码

作为一个设计师没有CorelDRAW用的日子真的是难过,最好用的就是CorelDRAW 2021的增强中文版,拥有极强的插件,为作图方便了不少!CorelDRAW作为世界一流的平面矢量绘图软件,被专业设计人员广泛使用,软件使用直…

Adobe Dreamweaver的使用教程

1.打开Adobe Dreamweaver软件 2.打开后的界面 3.新建一个站点,保存网页文件,图片,视频等 4.输入站点的名字和保存的路径 5.新建html文件 6.选择设计模式 7.制作你所需要的结果 8.保存网页,才能在浏览器中预览 9.保存网页&#xff…

Dreamweaver2019版安装教程

吐槽一下 学校机房软件跟新换代也太慢了 软件甚至还是使用CS4古董级 Edition 连H5都不能创建 软件Edition日新月异 百家争鸣的时代 不过自己也高不到哪去!使用的Adobe Dreamweaver CS6 前面也发表了低Edition的安装教程 如需考虑低版本请点击传送门 抛弃的原因&a…

Adobe Dreamweaver(DW)安装教程(附安装包下载地址)

一、安装包获取 1.百度网盘获取 链接:https://pan.baidu.com/s/1PqFChWBwSaZ6hLmD8uNY1Q?_at_1645531154665 提取码:0007 提示:如果链接失效请在评论区留言 2.同时给大家分享一个作者自己获取资源的方式:关注公众号 ” 稻田…

Adobe Dreamweaver 2021下载安装教程

软件介绍 Adobe Dreamweaver 2021是专业的网站设计软件,使用可为处理各种Web文档提供灵活的环境。Dreamweaver 2021一款非常受欢迎的网页设计软件,是该系列的全新版本,可以帮助广大学生、程序员制作出精美的网页,在全新的Dreamwe…

Dreamweaver CS6破解教程[序列号+破解补丁]

Adobe Dreamweaver CS6中文简体版下载地址:Dreamweaver CS6中文简体版下载[带破解] 该教程将不断更新,最新版请猛击:http://www.itxueyuan.org/view/6317.html 破解之前的准备 1) 序列号 这里为大家生成了两个,可以通过软件验证&a…