zoukankan      html  css  js  c++  java
  • C#皮肤制作

    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(255,0,255));
          }
            #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。具体的事件里面执行的代码也很简单,就是更换按钮的背景图片

  • 相关阅读:
    vuex action 与mutations 的区别
    vue element-UI 升级报错Cannot find module "element-ui/lib/theme-default/index.css"
    mac 端口占用问题
    关于npm 淘宝镜像 以及package.json里包的更新
    plugin-barcodescanner 报错
    ios集成极光推送:Undefined symbols for architecture arm64: "_dns_parse_resource_record", referenced from:?
    Undefined symbols for architecture i386: "_deflate", referenced from:
    ionic3 打包Xcode 9 Swift Language Version (SWIFT_VERSION) Ask 报错
    ionic3 调用摄像头 当键盘弹出时候 出现摄像头 背景
    ionic3 更新打开apk android 8.0报错
  • 原文地址:https://www.cnblogs.com/zhayunjia/p/3635468.html
Copyright © 2011-2022 走看看