C#自定义控件开发(1)
自定义控件可以用组件或者用户控件来开发,如果是基于基础控件,进行一些扩展,那么可以使用组件,其它的情况可以使用用户控件。
首先新建一个类库项目,然后添加一个组件,取名为ButtonExtend,再添加一个窗体进行测试:

因为是要在Button的基础上进行开发,所以将继承Component改为继承Button,同时将图片添加到资源中,方便使用。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace JSControl
{
public partial class ButtonExtend : Button
{
public ButtonExtend()
{
InitializeComponent();
this.Size = new System.Drawing.Size(50,100);//初始化控件大小
} public ButtonExtend(IContainer container)
{
container.Add(this); InitializeComponent();
} #region Filed
private ButtonPresetImage buttonType; [Browsable(true)]
[Category("ButtonType")]
[Description("设置图片")]
public ButtonPresetImage ButtonType
{
get { return buttonType; }
set
{
switch (buttonType)
{
buttonType = value;
case ButtonPresetImage.None:
this.Image = null;
this.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
break;
case ButtonPresetImage.Check:
this.Image = Properties.Resources.check;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Close:
this.Image = Properties.Resources.close;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Cancel:
this.Image = Properties.Resources.cancel;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Back:
this.Image = Properties.Resources.back;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Down:
this.Image = Properties.Resources.down;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Go:
this.Image = Properties.Resources.go;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Up:
this.Image = Properties.Resources.up;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Folder:
this.Image = Properties.Resources.folder;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Refresh:
this.Image = Properties.Resources.refresh;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Setting:
this.Image = Properties.Resources.setting;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.FolderOpen:
this.Image = Properties.Resources.folder_open;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.DocumentDelete:
this.Image = Properties.Resources.document_delete;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Document:
this.Image = Properties.Resources.document;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.DocumentEdit:
this.Image = Properties.Resources.document_edit;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Info:
this.Image = Properties.Resources.info;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.DocumentAdd:
this.Image = Properties.Resources.document_add;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Global:
this.Image = Properties.Resources.web;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Calculator:
this.Image = Properties.Resources.calculator;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Calendar:
this.Image = Properties.Resources.calendar;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
case ButtonPresetImage.Printer:
this.Image = Properties.Resources.printer;
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
break;
default:
break;
}
} }
#endregion /// <summary>
/// 枚举图标类型
/// </summary>
public enum ButtonPresetImage
{
None,
Check,
Close,
Cancel,
Back,
Down,
Go,
Up,
Folder,
Refresh,
Setting,
FolderOpen,
DocumentDelete,
Document,
DocumentEdit,
Info,
DocumentAdd,
Global,
Calculator,
Calendar,
Printer
}
} }
生成之后就会在工具箱找到该控件

同时在属性栏里可以选择图片


C#自定义控件开发(1)的更多相关文章
- iOS 自定义控件开发(中)
<iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> 接上篇iOS自定义控件开发之后,我们尝试另外一种. 在Xcode的右边,会看到如下的图 其中,上面有一个:C ...
- iOS 自定义控件开发(上)
工作需要,最近在进行iOS方面的图表工作.找了很多第三方库都无法实现效果,所以决定自己写一个控件. <iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> #0 目 ...
- C#自定义控件开发
自定义控件开发 一般而言,Visual Studio 2005中自带的几十种控件已经足够我们使用了,但是,在一些特殊的需求中,可能需要一些特殊的控件来与用户进行交互,这时,就需要我们自己开发新的.满足 ...
- 自定义控件开发的调试及DesignMode的状态处理
在开发Winform程序的时候,我们往往需要根据需要做一些自定义的控件模块,这样可以给系统模块重复利用,或者实现更好的效果等功能.但在使用的时候,我们又往往设计时刻发现一些莫名其妙的错误,那么我们该如 ...
- ZLComboBox自定义控件开发详解
[引言]距离上一回写博客已经有一些时日了,之前的爱莲iLinkIT系列主要是讲解了如何用NodeJS来实现一个简单的“文件传送”软件,属于JavaScript中在服务器端的应用. 今天,我们就回归到J ...
- .net的自定义JS控件,运用了 面向对象的思想 封装 了 控件(.net自定义控件开发的第一天)
大家好!我叫刘晶,很高兴你能看到我分享的文章!希望能对你有帮助! 首先我们来看下几个例子 ,就能看到 如何 自定义控件! 业务需求: 制作 一个 属于 自己的 按钮 对象 ,然后 像 ...
- TemplateBinding与Binding区别,以及WPF自定义控件开发的遭遇
在上一次的文章WPF OnApplyTemplate 不执行 或者执行滞后的疑惑谈到怎么正确的开发自定义控件,我们控件的样式中,属性的绑定一般都是用TemplateBinding来完成,如下一个基本的 ...
- Asp.net自定义控件开发任我行(附1)-属性一览众山小
元数据属性应用于服务器控件及其成员,从而提供由设计工具.ASP.NET 页分析器.ASP.NET 运行库以及公共语言运行库使用的信息.当页开发人员在可视化设计器中使用控件时,设计时属性能改进开发人员的 ...
- Asp.net自定义控件开发任我行(4)-ViewState保存控件状态
摘要 上一篇我们实现了下拉框的效果,此章的目的主要是保存控件属性状态 内容 我们先来看一个例子,后台代码不变,我们只改UI页面的代码,先在页面上拖放两个控件,一个是我们现在要开发的这个控件,另一个是按 ...
- Asp.net自定义控件开发任我行(2)-TagPrefix标签
摘要 前面我们已经做了一个最简单的TextBox的马甲,此篇文章,我们来讲讲自定义控件的标签.大家可能看到了上一篇中拖放进来的代码是 <cc1:TextEdit ID="TextEdi ...
随机推荐
- 线程池:ThreadPoolExecutor源码解读
目录 1 带着问题去阅读 1.1 线程池的线程复用原理 1.2 线程池如何管理线程 1.3 线程池配置的重要参数 1.4 shutdown()和shutdownNow()区别 1.5 线程池中的两个锁 ...
- 没有二十年功力,写不出Thread.sleep(0)这一行“看似无用”的代码!
你好呀,我是喜提七天居家隔离的歪歪. 这篇文章要从一个奇怪的注释说起,就是下面这张图: 我们可以不用管具体的代码逻辑,只是单单看这个 for 循环. 在循环里面,专门有个变量 j,来记录当前循环次数. ...
- 餐饮行业SRM案例:方正璞华"采云链"携手和府捞面
方正璞华在与和府捞面的项目中,帮助整合采购系统,系统化管理供应商,优化采购流程和数据分析,建立储备知识库. 项目背景 企业介绍 ◇ 和府捞面成立于2012年,是国内中式面食头部品牌.自2013年首 ...
- 24 个 Docker 常见问题处理技巧
转载自:https://mp.weixin.qq.com/s/PoyXyZUVQEiJfNac2qShkw
- kvm安装windows使用virtio驱动
Windows安装VirtIO驱动的两种方法 已经使用IDE方式来安装好系统 (1)安装完Windows后,创建一块临时的硬盘和网卡,将其驱动都设置为virtio模式添加到Windows中 (2) 添 ...
- 在K8S中安装jenkins
以 NFS 为存储卷的示例,将在 NFS 存储卷上创建 Jenkins 目录,然后创建 NFS 类型的 PV.PVC. 1.NFS 存储卷创建 Jenkins 目录 进入 NFS Server 服务器 ...
- [ML从入门到入门] 支持向量机:从SVM的推导过程到SMO的收敛性讨论
前言 支持向量机(Support Vector Machine,SVM)在70年代由苏联人 Vladimir Vapnik 提出,主要用于处理二分类问题,也就是研究如何区分两类事物. 本文主要介绍支持 ...
- java基础-冒泡排序以及稀疏数组
java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16720908.html Ø 冒泡排序原理: 比较数组中, ...
- echarts 改变个别省份的边界线颜色
想要实现地图,首先要引入china.js文件,如果有引入就直接调过本步骤去下方看代码,没有引入可以点击下方链接自行Ctrl c + Ctrl v china.js import "../.. ...
- 报时机器人的rasa shell执行流程分析
本文以报时机器人为载体,介绍了报时机器人的对话能力范围.配置文件功能和训练和运行命令,重点介绍了rasa shell命令启动后的程序执行过程. 一.报时机器人项目结构 1.对话能力范围 (1)能够 ...