1.CompositeControls组合控件:在原有控件的基础上根据需要进行组合

2.ExtendedControls 扩展控件:继承自原有控件,添加一些新的属性和方法,绘制一些新元素

当每个Button都使用一样的样式,可以使用自定义控件统一设置控件的属性、方法。

using System;
using System.Windows.Forms;
using System.Drawing; public class TouchscreenButton : Button
{
public TouchscreenButton()
{
this.Width = ;
this.Height = ;
this.FlatStyle = FlatStyle.Flat;
this.Cursor = Cursors.Hand;
this.ForeColor = Color.Black;
this.BackColor = Color.White;
this.FlatAppearance.BorderSize = ;
this.FlatAppearance.BorderColor = Color.Navy;
}
}

3.CustomControls自定义控件:控件的绘制全部由用户定义

一个可爱的笑脸控件

    public partial class Smiley : Control
{ public enum SampleColours
{
Red,
Green,
Blue,
Yellow
}
//创建一个枚举类型的属性,则这个属性可以进行选择
private SampleColours _smileyColor;
public SampleColours SmileyColor
{
get { return _smileyColor; }
set { _smileyColor = value; }
} private string _smileyName;
public string SmileyName
{
get { return _smileyName; }
set { _smileyName = value; }
} public Smiley()
{
InitializeComponent();
} protected override void OnPaint(PaintEventArgs pe)
{
//选择背景颜色
Color back;
switch (_smileyColor)
{
case SampleColours.Blue:
back = Color.Blue;
break;
case SampleColours.Green:
back = Color.Green;
break;
case SampleColours.Red:
back = Color.Red;
break;
default:
back = Color.Yellow;
break;
}
Brush background = new SolidBrush(back); //画背景
pe.Graphics.FillEllipse(background, , , this.Width - , this.Height - );
//左眼
pe.Graphics.FillEllipse(Brushes.Black, (this.Width / ), (this.Height / ), (this.Width / ), (this.Height / ));
//右眼
pe.Graphics.FillEllipse(Brushes.Black, this.Width - (this.Width / ) - , (this.Height / ), (this.Width / ), (this.Height / ));
//嘴
pe.Graphics.DrawArc(Pens.Black, (this.Width / ), (this.Height / ), (this.Width / ), (this.Height / ), , ); // Calling the base class OnPaint
base.OnPaint(pe);
}
}

【Winform-自定义控件】自定义控件学习+一个笑脸控件例子的更多相关文章

  1. WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 菜单M ...

  2. WPF自定义控件与样式(10)-进度控件ProcessBar自定义样

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Pro ...

  3. Qt编写自定义控件11-设备防区按钮控件

    前言 在很多项目应用中,需要根据数据动态生成对象显示在地图上,比如地图标注,同时还需要可拖动对象到指定位置显示,能有多种状态指示,安防领域一般用来表示防区或者设备,可以直接显示防区号,有多种状态颜色指 ...

  4. Qt编写自定义控件8-动画按钮组控件

    前言 动画按钮组控件可以用来当做各种漂亮的导航条用,既可以设置成顶部底部+左侧右侧,还自带精美的滑动效果,还可以设置悬停滑动等各种颜色,原创作者雨田哥(QQ:3246214072),驰骋Qt控件界多年 ...

  5. Qt编写自定义控件32-等待进度条控件

    一.前言 在各种各样的执行任务界面,有时候需要比较多的时间,需要给出一个直观的等待进度条表示当前正在执行的进度,而不至于懵逼在那里,用户不会觉得程序死了还是干嘛了. 等待进度条有好几种办法,比如直接叫 ...

  6. Qt编写自定义控件24-图片轮播控件

    一.前言 上一篇文章写的广告轮播控件,采用的传统widget堆积设置样式表做的,这次必须要用到更高级的QPainter来绘制了,这个才是最高效的办法,本控件参考雨田哥的轮播控件,经过大规模的改造而成, ...

  7. Qt编写自定义控件23-广告轮播控件

    一.前言 广告轮播这个控件做的比较早,是很早以前定制一个电信客户端时候用到的,该客户端需要在首页展示轮播预先设定好的图片,图片的路径可以自由设定,然后轮播的间隔速度可以自由控制,同时该控件还需要提供两 ...

  8. iOS开发——UI高级OC篇&自定义控件之调整按钮中子控件(图片和文字)的位置

    自定义控件之调整按钮中子控件(图片和文字)的位置 其实还有一种是在storyBoard中实现的,只需要设置对应空间的左右间距: 这里实现前面两种自定义的方式 一:imageRectForContent ...

  9. WPF自定义控件(五)の用户控件(完结)

    用户控件,WPF中是继承自UserControl的控件,我们可以在里面融合我们的业务逻辑. 示例:(一个厌恶选择的用户控件) 后端: using iMicClassBase; using iMicCl ...

随机推荐

  1. SQLite基础-3.语法与数据类型

    目录 一.SQLite语法 1. 大小写敏感性 2. 注释 3. SQLite语句 二. SQLite 数据类型 1. Boolean 数据类型 2. Date 与 Time 数据类型 一.SQLit ...

  2. 剑指offer5:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    1. 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 2. 思想 (1)栈的特点是先进后出,而队列的特点是先进先出: (2)因此,入队列的情况和入栈的情 ...

  3. python基础学习日记(一)注释(二)算术运算符(三)变量的基本使用

    一.python程序的注释 注释部份程序运行时不起作用.用于说明代码的用途 1.单行注释 # 开始的一行文字,为单行注释 # 单行注释 print("hello python") ...

  4. 安装consul

    概述consul是google开源的一个使用go语言开发的服务发现.配置管理中心服务.内置了服务注册与发现框架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方要依赖其他工具(比如Z ...

  5. 02docker核心概念

    1:docker三大核心概念 核心概念 描述 镜像 Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板. 容器 Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用 ...

  6. 清除vs2005、vs2008起始页最近打开项目

    有时候vs2005起始最近打开项目过多很想清除掉,但打遍了也没找到清除选项在哪里,今天找到了方法,发上来和大家共享. 方法一手工操作方法:1)删除最近打开的文件运行regedit,打开HKEY_CUR ...

  7. vs 2017创建类时的默认模板修改

    思路:找到vs 2017安装目录---->找到模板文件---->修改 一般安装目录: C:\Program Files (x86)\Microsoft Visual Studio\2017 ...

  8. 【原创】大数据基础之Kudu(5)kudu增加或删除目录/数据盘

    kudu加减数据盘不能直接修改配置fs_data_dirs后重启,否则会报错: Check failed: _s.ok() Bad status: Already present: FS layout ...

  9. O040、Migrate Instance 操作详解

    参考https://www.cnblogs.com/CloudMan6/p/5538599.html   Migrate 操作的作用是将instance 从当前的计算节点迁移到其他的计算节点上.   ...

  10. java实现spark常用算子之Reduce

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...