//Create by ChimHsiung 2016
//图片按钮+自定义形状 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.CompilerServices;
using System.Drawing.Drawing2D;namespace Chim.UI.ImageButton
{public partial class ImageButton : UserControl{private Image p1;private Image p2;private Image p3;private Cshap shap1;protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)//重载{//解决显示异常,ImageButton事件无效?this.lblTemp.Parent = this.pbImage;this.lblTemp.Width = this.pbImage.Width;this.lblTemp.Left = (int)Math.Round((double)((((double)this.pbImage.Width) / 2.0) - (((double)this.lblTemp.Width) / 2.0)));this.lblTemp.Top = (int)Math.Round((double)((((double)this.pbImage.Height) / 2.0) - (((double)this.lblTemp.Height) / 2.0)));base.OnPaint(e);System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();switch(shap1.ToString()){case "矩形":path.AddRectangle(new Rectangle(this.Location, new Size(this.Width, this.Height)));break;case "圆角矩形": //addarc两参数未明                  Rectangle rec = new Rectangle(this.Location, new Size(this.Width, this.Height));//左上角path.AddArc(rec, 185, 90);//右上角rec.X = this.Right - this.Width;path.AddArc(rec, 275, 90);//右下角rec.Y = this.Bottom - this.Height;path.AddArc(rec, 356, 90);//左下角rec.X = this.Left;path.AddArc(rec, 90, 90);path.CloseFigure();break;case "圆形":path.AddEllipse(0, 0, this.Width, this.Height);break;                case "三角形":Point[] triangleP = new Point[3];triangleP[0] = new Point((this.Left + this.Width) / 2, this.Location.Y);triangleP[1] = new Point(this.Left, this.Top + this.Height);triangleP[2] = new Point(this.Left + this.Width, this.Top + this.Height);path.AddPolygon(triangleP);break;case "菱形":Point[] triangleD = new Point[4];triangleD[0] = this.Location;triangleD[1] = new Point((this.Left + this.Width) / 2, this.Location.Y);triangleD[2] = new Point(this.Left + this.Width, this.Top + this.Height);triangleD[3] = new Point((this.Left + this.Width) / 2, this.Top + this.Height);                    path.AddPolygon(triangleD);                    break;default:path.AddRectangle(new Rectangle(this.Location, new Size(this.Width, this.Height)));break;         }this.Region = new Region(path); }protected override void OnPaintBackground(PaintEventArgs pevent){Pen pen = new Pen(this.BackColor);Graphics g = this.CreateGraphics();g.Clear(Color.Goldenrod);g.FillEllipse(Brushes.DarkKhaki, new Rectangle(0, 0, this.Width, this.Height));}protected override void OnResize(EventArgs e){OnPaint(null);OnPaintBackground(null);base.OnResize(e);}public enum Cshap{矩形 =0,圆角矩形 =1,圆形 =2,三角形 =3,菱形 =4,};public delegate void ClickEventHandler(object sender, EventArgs e);public new event ClickEventHandler Click;public ImageButton(){//base.MouseLeave += new EventHandler(this.ImageButton_MouseLeave);//base.Resize += new EventHandler(this.ImageButton_Resize);//base.Load += new EventHandler(this.ImageButton_Load);//base.MouseEnter += new EventHandler(this.ImageButton_MouseEnter);InitializeComponent();}[Category("外观")][Description("按钮形状")]//[DefaultValue("矩形")]//为何无效public Cshap ButtonShape{get{return this.shap1;}set{this.shap1 = value;//重绘形状OnPaint(null);OnPaintBackground(null);}}[Category("重要属性")][Description("按钮正常时显示的图片")]public Image ButtonImage{get{return this.pbImage.Image;}set{this.pbImage.Image = value;this.p1 = value;}}[Category("重要属性")][Description("按钮中显示的文本")]public string ButtonText{get{return this.lblTemp.Text;}set{this.lblTemp.Text = value;}}[Category("重要属性")][Description("文本显示方式")]public ContentAlignment TextAlign{get{return this.lblTemp.TextAlign;}set{this.lblTemp.TextAlign = value;}}[Category("重要属性")][Description("按钮按下时显示的图片")]public Image MouseClickImage{get{return this.p3;}set{this.p3 = value;}}[Category("重要属性")][Description("按钮点燃时显示的图片")]public Image MouseOverImage{get{return this.p2;}set{this.p2 = value;}}public void ImageButton_MouseEnter(object sender, EventArgs e){Graphics g = this.CreateGraphics();g.DrawEllipse(new Pen(Color.Red), 0, 0, this.Width, this.Height);g.Dispose();this.pbImage.Image = this.p2;}public void ImageButton_MouseLeave(object sender, EventArgs e){this.pbImage.Image = this.p1;}private void ImageButton_Resize(object sender, EventArgs e){this.lblTemp.Left = (int)Math.Round((double)((((double)this.pbImage.Width) / 2.0) - (((double)this.lblTemp.Width) / 2.0)));this.lblTemp.Top = (int)Math.Round((double)((((double)this.pbImage.Height) / 2.0) - (((double)this.lblTemp.Height) / 2.0)));}private void ImageButton_Load(object sender, EventArgs e){lblTemp_TextChanged(sender,e);//this.lblTemp.Parent = this.pbImage;//this.lblTemp.Width = this.pbImage.Width;//this.pbImage.Image = this.p1;//this.lblTemp.Left = (int)Math.Round((double)((((double)this.pbImage.Width) / 2.0) - (((double)this.lblTemp.Width) / 2.0)));//this.lblTemp.Top = (int)Math.Round((double)((((double)this.pbImage.Height) / 2.0) - (((double)this.lblTemp.Height) / 2.0)));}//Lable事件private void lblTemp_Click(object sender, EventArgs e){ClickEventHandler clickEvent = this.Click;if (clickEvent != null){clickEvent(this, e);}}private void lblTemp_MouseDown(object sender, MouseEventArgs e){OnPaintBackground(null); this.pbImage.Image = this.p3;}private void lblTemp_MouseEnter(object sender, EventArgs e){this.Cursor = Cursors.Hand;this.pbImage.Image = this.p2;}private void lblTemp_MouseHover(object sender, EventArgs e){this.pbImage.Image = this.p2;}private void lblTemp_MouseLeave(object sender, EventArgs e){this.Cursor = Cursors.Arrow;this.pbImage.Image = this.p1;}private void lblTemp_MouseUp(object sender, MouseEventArgs e){this.pbImage.Image = this.p1;}private void lblTemp_TextChanged(object sender, EventArgs e){this.lblTemp.Parent = this.pbImage;this.lblTemp.Width = this.pbImage.Width;this.lblTemp.Left = (int)Math.Round((double)((((double)this.pbImage.Width) / 2.0) - (((double)this.lblTemp.Width) / 2.0)));this.lblTemp.Top = (int)Math.Round((double)((((double)this.pbImage.Height) / 2.0) - (((double)this.lblTemp.Height) / 2.0)));}//PictureBox事件private void pbImage_BackgroundImageChanged(object sender, EventArgs e){this.pbImage.Refresh();}private void pbImage_Click(object sender, EventArgs e){ClickEventHandler clickEvent = this.Click;if (clickEvent != null){clickEvent(this, e);}}private void pbImage_MouseDown(object sender, MouseEventArgs e){this.Cursor = Cursors.Hand;this.pbImage.Image = this.p3;}private void pbImage_MouseEnter(object sender, EventArgs e){this.Cursor = Cursors.Hand;this.pbImage.Image = this.p2;}private void pbImage_MouseHover(object sender, EventArgs e){this.pbImage.Image = this.p2;}private void pbImage_MouseLeave(object sender, EventArgs e){this.Cursor = Cursors.Arrow;this.pbImage.Image = this.p1;}private void pbImage_MouseUp(object sender, MouseEventArgs e){this.pbImage.Image = this.p1;}}
}

图片按钮+自定义形状相关推荐

  1. cocos2d-lua 图片裁剪自定义形状

    有两种方法一种是用clippingNode来进行遮罩--对节点进行遮罩式裁剪 --picPath and stencilPath 尺寸要一致, 更新节点需要移除之前的节点 function cc.ex ...

  2. java 自定义形状按钮_制作自定义背景Button按钮、自定义形状Button的全攻略

    在Android开发应用中,默认的Button是由系统渲染和管理大小的.而我们看到的成功的移动应用,都是有着酷炫的外观和使用体验的.因此,我们在开发产品的时候,需要对默认按钮进行美化.在本篇里,笔者结 ...

  3. QML | 自定义圆形图片按钮

    在一个项目中需要做一个圆形图片按钮的列表,就自己实现了下. 此按钮有两个自定义属性,分别表示按钮按下时和未按下时候显示的图片,还有一个rbClicked信号为按钮点击的响应信号. //RoundBut ...

  4. 免费的Photoshop自定义形状图片集合分享

    在Photoshop中设计的时候.自定义形状可以为我们节省大量的时间,今天就给大家分享一些常用的图片形状 Red Faction Guerrilla Shapes Photoshop Shapes C ...

  5. Android AOSP LatinIME输入法自定义图片按钮

    文章目录 前言 一.引进图片按钮 二.添加映射 三.attrs.xml 四.KeyboardIconsSet.java 五.Constants.java 六.KeyboardCodesSet.java ...

  6. Tableau:如何自定义形状

    1. 自定义形状   常见的"形状"用法如下,这里可以给不同客户类型指定不同的形状. 除了"标记"下的"形状"选项卡中预先设置的形状外,用户 ...

  7. 使用图片方式自定义iOS导航栏navigationItem的backBarButtonItem

    2019独角兽企业重金招聘Python工程师标准>>> 在做ViewControlller的navigationItem时,我们经常需要使用自定义的图片来替换系统默认的按钮样式,这点 ...

  8. 自己写一个图片按钮(XAML)

    有时需要用三张图片(正常状态,鼠标移上,鼠标按下)来作为一个按钮的样式,虽然这种做法不好,应该用矢量的方式制作样式,但有的时候还是需要这样做的. 每次都修改按钮的样式来实现这个做法,既麻烦又会生成大段 ...

  9. ps自定义形状工具_【福利】3000款PS自定义形状免费打包下载

    PS形状介绍 获取方式见文末 ps自定义形状素材包包含例如:品牌标志Logo.动物形状,花卉形状,圆圈形状,边框形状,人物形状,海洋生物形状,南瓜形状,万圣节形状,扑克牌形状等等.合计3000款!如果 ...

最新文章

  1. 【c语言】简单计算器
  2. 中科院院士丁汉:数字化制造、机器人、人工智能是智能制造 “三驾马车”
  3. 拉勾启源老师mysql讲义,【拉勾教育数据分析实战训练营】--Tableau学习笔记-重点回顾1...
  4. 和平精英、宾果消消消等多款游戏APP存隐私不合规行为
  5. int指令02 - 零基础入门学习汇编语言65
  6. merge into用法mysql_Oracle MERGE INTO的用法示例介绍
  7. python中关于深嵌元组转列表的小问题
  8. opencv (二十六)图像直方图匹配
  9. stc15w4k32s4最小系统原理图_单片机最小系统原理图,求详细讲解
  10. php在线解密,zend在线解密
  11. Tbase安装遇错解决办法
  12. 工具推荐:最好用的pCap工具
  13. 从《三体》中的“降维打击”看网络世界,论维度升级的方法与实践
  14. 修改植物大战僵尸数据
  15. python菜鸟教程mac安装_Python菜鸟教程 | 多平台安装
  16. 一分钟带你快速认识S参数
  17. nmon analyser 使用中报错“宏”不可用的问题及处理
  18. Python实现简易音频播放器
  19. 上云节省 35%计算资源,420 个运维人天:运满满实时计算实践和思考
  20. Jenkin权限控制——基于角色授权策略

热门文章

  1. 河南理工大学计算机学院张磊,河南理工大学关于表彰2010—2011学年学生创先争优活动先进集体和先进.doc...
  2. 六度分离理论、150法则与弱链接 (转载)
  3. 如何提高职场说服力?这本说服力书籍你值得拥有!
  4. oracle里面cat,Oracle 12c 中推荐使用 catcon.pl 执行SQL脚本
  5. DRM之Microsoft PlayReady学习入门(一)
  6. ubuntu18.04下安装向日葵控制端
  7. 全国计算机停考通知,紧急停考通知!!!
  8. 项目需求之Android 监听键盘的弹起和隐藏setVisibility(View.GONE)方法失效
  9. java list按字母排序_如何按字母顺序对列表进行排序?
  10. 2017年12月英语六级翻译洞庭湖