using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//using System.Reflection; namespace QLFUI
{
[DefaultEvent("Click")]
public partial class Button : UserControl
{
#region 变量 //三种不同状态下的图片
Image _normalImage = null;
Image _moveImage = null;
Image _downImage = null; #endregion
#region 属性
/// <summary>
/// 控件正常状态下显示的图片和Text
/// </summary> [Category("QLFSkinDll")]
public Image NormalImage
{
get
{
return _normalImage;
}
set
{
_normalImage = value;
}
}
[Category("QLFSkinDll")]
public Image DownImage
{
get{ return _downImage; }
set
{
_downImage = value;
}
} [Category("QLFSkinDll")]
public Image MoveImage
{
get{ return _moveImage; }
set
{
_moveImage = value;
}
}
[Category("QLFSkinDll")]
public string Caption
{
get{ return this.button1.Text;} //控件运行时会自动运行get方法得到值
set
{
this.button1.Text = value;
}
} #endregion #region 构造函数
public Button()
{
// InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
//默认的是自带的图片样式,如果使用该按钮则必须手工指定当前按钮你想要的背景图片
_normalImage = Image.FromStream(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(@"QLFUI.3.jpg"));
//_moveImage = Image.FromStream(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(@"QLFUI.btnfore.jpg"));
// _downImage = Image.FromStream(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(@"QLFUI.btndown.jpg"));
MakeTransparent(_normalImage);
// MakeTransparent(_moveImage);
// MakeTransparent(_downImage);
InitializeComponent();
this.BackgroundImage = null;
//button1.BackgroundImage = _normalImage;
//this.BackgroundImage = _normalImage;
}
#endregion #region 辅助函数透明处理
private void MakeTransparent(Image image)
{
Bitmap bitmap = image as Bitmap;
bitmap.MakeTransparent(Color.FromArgb(,,));
}
#endregion #region 事件 private void button1_MouseEnter(object sender, EventArgs e)
{
button1.BackgroundImage = _normalImage;
//this.BackgroundImage = _moveImage;
} //private void button1_MouseDown(object sender, MouseEventArgs e)
//{
// button1.BackgroundImage = _downImage;
// //this.BackgroundImage = _downImage;
//} private void button1_MouseLeave(object sender, EventArgs e)
{
button1.BackgroundImage = null;// _normalImage;
// this.BackgroundImage = _normalImage;
} //private void button1_MouseUp(object sender, MouseEventArgs e)
//{
// button1.BackgroundImage = _normalImage;
// //this.BackgroundImage = _normalImage;
//} private void button1_Click(object sender, EventArgs e)
{
this.OnClick(e);
} #endregion }
}

[DefaultEvent("Click")],这句话是什么意思呢?我们知道平常我们拖一个按钮后,在设计模式下双击这个按钮就会自动产生这个按钮的Click事件。这个默认的Click事件从哪里来的呢,毫无疑问就是[DefaultEvent("Click")]这一句来设置的啦!这里默认的是Click事件,如果写成[DefaultEvent("MouseEnter")]就是MouseEnter事件啦!

接下来的四句分别定义了按钮三种不同状态下的bitmap。

下面的四个属性分别是三种不同状态下Image的属性和按钮的文字属性Caption,大家一看应该就明白。具体要解释的就是[Category("QLFSkinDll")]。这句话的意思是将这些属性分类,看个图片大家就都明白了:以后在项目中设置属性时,我们定义的属性就自动分类在QLFSkinDll下面了。

接下来是构造函数:public Button(){}中的内容。

第一句是开始了窗体的双缓冲。双缓冲的意思就是现在内容中将图像画好了然后再显示到界面上去。在c#中图像一多最怕的就是图像闪烁的问题,开启了双缓冲虽说不能完全避免图像闪烁,但起码也能有一定的效果,我们就先开着吧^ ^!

接下来的三句就是给三个状态的图像赋值了,这里我是把图像嵌入进来了,并没有放置在外部。要应用嵌入的资源分两步走:第一步在项目中点击图片的属性,然后将“生成操作”改为嵌入的资源。

第二步应用就是我们用到的代码啦:Assembly.GetExecutingAssembly().GetManifestResourceStream(@"QLFUI.Res.button.btnnomal.bmp"),这句话前面的照写,后面的路径规则是“命名空间+文件夹名+你的文件名+文件名后缀”,当然如果你的文件直接放在项目下就没有文件夹名了。聪明的大家应该明白吧?呵呵!其中我们要用到的文件大家可以从我给的项目例子中复制。接下来的MakeTransparent(_normalImage);MakeTransparent(_moveImage);MakeTransparent(_downImage);三句先不看,可以注释掉,下面会讲解它的作用的。

第八句InitializeComponent()是系统自带的初始化控件一些代码,我们不用去管它。最后一句this.BackgroundImage =_normalImage;就是设置按钮的其实的图片的样子啦!

再来看第二个问题,要实现按钮的变色肯定是跟鼠标的事件相关啦,比如说鼠标一进入按钮的范围之内我们就让按钮的背景改变,按下和离开按钮的时候也响应的改变背景。所以我们用到这四个事件(注意,事件都是label1的事件,因为我们将label覆盖在按钮上,所以我们点击的其实是label1):MouseEnter,MouseDown, MouseLeave, MouseUp。具体的事件里面执行的代码也很简单,就是更换按钮的背景图片

C#皮肤制作的更多相关文章

  1. C#窗口皮肤制作(二):创建窗口库项目以及最小化、最大化、关闭button的实现

    非常高兴有朋友关注这篇博客,同一时候也十分抱歉让关注的朋友久等了,隔上一篇博客也有3个月没有更新,主要是因为3月份辞职,4月份初离职到期离开了北京高德,来到了上海张江.眼下新工作也处于熟悉其中,希望大 ...

  2. DNN学习笔记 最简单的皮肤制作

    说明: 在学习DNN时,使用的版本为 DNN8.参考资料:http://www.dnnsoftware.com/docs/designers/creating-themes/index.html 制作 ...

  3. 【汇总】 为园友写的皮肤制作工具 awescnb

    Awescnb, awesome cnblog. 简介 可能许多初来乍到的新手会被博客园经典的风格劝退,或者您是一个老园友,需要为您的博客定制一些功能(例如宣传公众号,文章目录.或者插入几个捐助二维码 ...

  4. Sencha Extjs4.2 皮肤制作

    1                 UI组件基础 学习ExtJs就是学习组件的使用.ExtJs4对框架进行了重构,其中最重要的就是形成了一个结构及层次分明的组件体系,由这些组件形成了Ext的控件. E ...

  5. C#制作高仿360安全卫士窗体<一>

    开始写这一系列博客之前先要向大家说声抱歉,放肆雷特建立很久却很少有更新.当然博客人气也不旺,大部分都是看的人多评论收藏的人少.一直想要改变这种状态,正好赶上了最近工作上做了一个高仿360安全卫士窗体. ...

  6. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程07:UI》

    概述: UI即User Interface(用户界面)的简称.UI设计是指对软件的燃机交互.操作逻辑.界面美观的整体设计.好的UI设计不仅可以让游戏变得更有品位,更吸引玩家,还能充分体现开发者对游戏整 ...

  7. c++界面设计皮肤工具

    1. 先进行软件界面设计,确定软件界面美术包装方案 2. 依据软件界面美术设计装方案制作对应的图片,图片格式请參见AUDK的帮助文档或皮肤工具SkinTool 的 Demo 3. 打开皮肤工具 Ski ...

  8. MFC 使用Skin++ 美化皮肤

    查了好几天关于MFC应用程序换肤的资料,经过各种莫名其妙的问题的困扰,现分享一下自己的体会.希望可 以避免一些弯路.另外会在附上一些资源. 环境:Windows 7 + VS2012 + SkinSh ...

  9. Java 开源博客 Solo 1.9.0 发布 - 新皮肤

    这个版本主要是改进了评论模版机制,让大家更方便皮肤制作,并发布了一款新皮肤:9IPHP. Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤.除此之外,S ...

随机推荐

  1. 程序开发使用docker部署

    我们公司自己研发了一套 grand-line 系统,使用 docker 来部署项目. 我是第一批小白鼠,一开始网络差,build 一次要半个小时,连接进入 web shell 也很慢,部署一个微信项目 ...

  2. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  3. 后记:Cookie安全大辩论总结

    前天,我发布在博客园上的某知名电商网站的Cookie漏洞引发园友们的热议,学到了很多知识,现在整理一下其中比较激烈的技术讨论.谁对谁错每个人自己心中都有一把称,很多时候都是我无法说服你,你也无法说服我 ...

  4. 一次由于开启 Safari 无痕浏览 引发的艰难“捉虫”事件

    事件回顾 做了一个移动端的页面,测试的时候出现了一个诡异的 bug.别的浏览器都好好的,就 ios 的 Safari 浏览器页面停止了渲染,似乎是有一段 js 文件没有载入.但是奇怪的是,同一型号的 ...

  5. 开源磁力搜索爬虫dhtspider原理解析

    开源地址:https://github.com/callmelanmao/dhtspider. 开源的dht爬虫已经有很多了,有php版本的,python版本的和nodejs版本.经过一些测试,发现还 ...

  6. ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...

  7. 20160803 - C:\WINDOWS\system32\config\systemprofile\Desktop 不可用的解决

    问题:某些软件在从注册表读取用户桌面地址时,欠考虑的%USERPROFILE%的情况,例如迅雷打开文件时,会提示: [Window Title]位置不可用 [Content]C:\WINDOWS\sy ...

  8. NPOI2.0学习(三)

    HSSFWorkbook wk = new HSSFWorkbook();//你用来操作的HSSFWorkbook的实例 ICellStyle cellStyle = wk.CreateCellSty ...

  9. RHEL7挂载ISO做本地yum

    测试环境,网络yum源没有本地yum源下载速度快!Yum比起RPM装包的好处就是可以自己处理依赖关系,也就是自己安装相关的依赖包,用起来也是很方便,但是删包的时候也会删除依赖包,这里要非常小心 01. ...

  10. android开发------Activity生命周期

    这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...