自定义控件可以用组件或者用户控件来开发,如果是基于基础控件,进行一些扩展,那么可以使用组件,其它的情况可以使用用户控件。

首先新建一个类库项目,然后添加一个组件,取名为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)的更多相关文章

  1. iOS 自定义控件开发(中)

    <iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> 接上篇iOS自定义控件开发之后,我们尝试另外一种. 在Xcode的右边,会看到如下的图 其中,上面有一个:C ...

  2. iOS 自定义控件开发(上)

    工作需要,最近在进行iOS方面的图表工作.找了很多第三方库都无法实现效果,所以决定自己写一个控件. <iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> #0 目 ...

  3. C#自定义控件开发

    自定义控件开发 一般而言,Visual Studio 2005中自带的几十种控件已经足够我们使用了,但是,在一些特殊的需求中,可能需要一些特殊的控件来与用户进行交互,这时,就需要我们自己开发新的.满足 ...

  4. 自定义控件开发的调试及DesignMode的状态处理

    在开发Winform程序的时候,我们往往需要根据需要做一些自定义的控件模块,这样可以给系统模块重复利用,或者实现更好的效果等功能.但在使用的时候,我们又往往设计时刻发现一些莫名其妙的错误,那么我们该如 ...

  5. ZLComboBox自定义控件开发详解

    [引言]距离上一回写博客已经有一些时日了,之前的爱莲iLinkIT系列主要是讲解了如何用NodeJS来实现一个简单的“文件传送”软件,属于JavaScript中在服务器端的应用. 今天,我们就回归到J ...

  6. .net的自定义JS控件,运用了 面向对象的思想 封装 了 控件(.net自定义控件开发的第一天)

    大家好!我叫刘晶,很高兴你能看到我分享的文章!希望能对你有帮助! 首先我们来看下几个例子 ,就能看到 如何 自定义控件! 业务需求: 制作  一个   属于 自己的    按钮 对象    ,然后 像 ...

  7. TemplateBinding与Binding区别,以及WPF自定义控件开发的遭遇

    在上一次的文章WPF OnApplyTemplate 不执行 或者执行滞后的疑惑谈到怎么正确的开发自定义控件,我们控件的样式中,属性的绑定一般都是用TemplateBinding来完成,如下一个基本的 ...

  8. Asp.net自定义控件开发任我行(附1)-属性一览众山小

    元数据属性应用于服务器控件及其成员,从而提供由设计工具.ASP.NET 页分析器.ASP.NET 运行库以及公共语言运行库使用的信息.当页开发人员在可视化设计器中使用控件时,设计时属性能改进开发人员的 ...

  9. Asp.net自定义控件开发任我行(4)-ViewState保存控件状态

    摘要 上一篇我们实现了下拉框的效果,此章的目的主要是保存控件属性状态 内容 我们先来看一个例子,后台代码不变,我们只改UI页面的代码,先在页面上拖放两个控件,一个是我们现在要开发的这个控件,另一个是按 ...

  10. Asp.net自定义控件开发任我行(2)-TagPrefix标签

    摘要 前面我们已经做了一个最简单的TextBox的马甲,此篇文章,我们来讲讲自定义控件的标签.大家可能看到了上一篇中拖放进来的代码是 <cc1:TextEdit ID="TextEdi ...

随机推荐

  1. Dynamic CRM插件中记录日志-Nlog记录到文本

    Dynamic CRM插件中记录日志的方式有多种 通常情况下分为ITracingService记录.单独日志表插入记录.文本记录三种. 之前整理过ITracingService记录的方式,但这种记录有 ...

  2. 第九十八篇:Web的储存机制LocalStorage

    好家伙 1.什么是LocalStorage? LocalStorage 是一种 web 端的存储机制, 它使得由 JavaScript 编写的网站或者应用可以无限期的在浏览器中存储并访问数据. Loc ...

  3. 简析XDP的重定向机制

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 一. XDP Socket示例解析 源码参见:htt ...

  4. Linux常用基础命令一

    一.目录操作 进入路径 cd [目录地址] 切换回主目录 cd 返回上一个路径 cd - 打印当前路径 pwd 列出目录下文件 ls ---查看只包含非隐藏文件 ls -a -----查看目录下所有文 ...

  5. JS中如何删除某个父元素下的所有子元素?

    JS中如何删除某个父元素下的所有子元素?这里我介绍几种方法: 1.通过元素的 innerHTML 属性来删除 这种方式我觉得是最有方便的,直接找到你想要的父元素,直接令其 element.innerH ...

  6. kettle通过SSH连接Mysql数据库(SSH隧道)

    kettle通过SSH连接Mysql数据库(SSH隧道) Kettle无法直接连接使用SSH通道的MySQL,通过SSH隧道(推荐)或者需要借助工具PuTTY(不用时需要注销不推荐),具体操作如下所示 ...

  7. (数据科学学习手札141)利用Learn Git Branching轻松学习git常用操作

    1 简介 大家好我是费老师,Git作为世界上最流行的版本控制系统,可以说是每一位与程序打交道的朋友最值得学习的软件之一.除了管理自己的项目,如果你对参与开源项目感兴趣,那么Git更是联结Github. ...

  8. Netty 学习(三):通信协议和编解码

    Netty 学习(三):通信协议和编解码 作者: Grey 原文地址: 博客园:Netty 学习(三):通信协议和编解码 CSDN:Netty 学习(三):通信协议和编解码 无论使用 Netty 还是 ...

  9. 【学习笔记】注意力机制(Attention)

    前言 这一章看啥视频都不好使,啃书就完事儿了,当然了我也没有感觉自己学的特别扎实,不过好歹是有一定的了解了 注意力机制 由于之前的卷积之类的神经网络,选取卷积中最大的那个数,实际上这种行为是没有目的的 ...

  10. mysql8 安装与配置文件添加时区

    mysql默认时区选择了CST mysql>show variables like '%time_zone%'; 解决办法:(建议通过修改配置文件来解决) 通过命令在线修改: mysql> ...