注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

xian827991006

专注于DotNet编程,QlikView开发,网站seo,各种软件工具,互联网

 
 
 

日志

 
 
关于我

爱看书、爱探索的人. 目前关注与QlikView开发,推荐一个QlikView资源站。www.qlikviewcn.com

网易考拉推荐

C#基础温习(11):不规则按钮实现  

2013-05-09 09:06:06|  分类: C#和VS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

按钮控件在windows forms总是我们使用最多的控件之一了,可是你真的了解它吗?除了修改它的text属性以及该name的名字和增加事件处理的代码你还了解其他吗?

假如有这样一个需求,我们要做一个不规则的按钮,我们该具体如何实现呢?

好吧,别的先不多说了,我直接上实例代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace Borwer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 返回指定图片中的非透明区域;
/// </summary>
/// <param name="img">位图</param>
/// <param name="alpha">alpha 小于等于该值的为透明</param>
/// <returns></returns>
public static GraphicsPath GetNoneTransparentRegion(Bitmap img, byte alpha)
{
int height = img.Height;
int width = img.Width;
int xStart, xEnd;
GraphicsPath grpPath = new GraphicsPath();
for (int y = 0; y < height; y++)
{
//逐行扫描;
for (int x = 0; x < width; x++)
{
//略过连续透明的部分;
while (x < width && img.GetPixel(x, y).A <= alpha)
{
x++;
}
//不透明部分;
xStart = x;
while (x < width && img.GetPixel(x, y).A > alpha)
{
x++;
}
xEnd = x;
if (img.GetPixel(x - 1, y).A > alpha)
{
grpPath.AddRectangle(new Rectangle(xStart, y, xEnd - xStart, 1));
}
}
}
return grpPath;
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Visible = false;
pictbox.Visible = false;
}
private void btnCircle_Paint(object sender, PaintEventArgs e)
{
Bitmap img = (Bitmap)pictbox.Image;
GraphicsPath grapth = GetNoneTransparentRegion(img, 10);
btnCircle.Region = new Region(grapth);
//要显示的图片设置为窗体背景;
btnCircle.BackgroundImage = pictbox.Image;
btnCircle.BackgroundImageLayout = ImageLayout.Zoom;
//在修改窗体尺寸之前设置窗体为无边框样式;
btnCircle.Width = pictbox.Image.Width;
btnCircle.Height = pictbox.Image.Height;
}
private void btnCircle_Click(object sender, EventArgs e)
{
MessageBox.Show("我是心状不规则按钮");
}
private void button1_Paint(object sender, PaintEventArgs e)
{
Bitmap img = (Bitmap)pictureBox1.Image;
GraphicsPath grapth = GetNoneTransparentRegion(img, 10);
button1.Region = new Region(grapth);
//要显示的图片设置为窗体背景;
button1.BackgroundImage = pictureBox1.Image;
button1.BackgroundImageLayout = ImageLayout.Zoom;
//在修改窗体尺寸之前设置窗体为无边框样式;
button1.Width = pictbox.Image.Width;
button1.Height = pictbox.Image.Height;
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("我是苹果不规则按钮");
}
}
}

运行结果:

不规则按钮效果

不规则按钮效果

上面的弹出框是点击心状按钮的回应,怎么样效果实现了吧,你可以选择一些更多的图片去玩玩看看,很爽的效果。

除非注明,木杉博客文章均为原创并采用BY-NC-SA协议进行授权原创文章,转载请注明: 转载自木杉博客

本文链接地址: C#基础温习(11):不规则按钮实现

  评论这张
 
阅读(607)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017