WinForm 中实现不规则按钮

在很多的视频播放器中,控制按钮都是不规则的,界面非常友好。在我们很多的WinForm项目中,为了增加界面的效果,有时也想加入一些闪亮的按钮,但光是有好看的图片也未必做出好的效果,在此,介绍一下如果制作一个不规则的按钮控件。

1、考虑如何改变Control.Region,我是使用图片生成一个GraphicsPath,按钮的形态就是这个GraphicsPath了。

        private GraphicsPath GetAutoRgn(Image img, Color transColor)
        {
            int posT = 0;
            int posS = 0;
            Bitmap bm = null;
            bm = new Bitmap(img, this.ClientSize);
            //   Bitmap bm = new Bitmap(this.shapeImage);
            GraphicsPath myGraphicsPath = new System.Drawing.Drawing2D.GraphicsPath();
            //   myGraphicsPath.AddRectangle(new Rectangle(0,0,20,20));
            //   myGraphicsPath.AddRectangle(new Rectangle(20,6,12,12));
            for (int y = 0; y < bm.Height; y++)
            {
                int x = 0;
                while (x < bm.Width)
                {
                    while (x < bm.Width && bm.GetPixel(x, y).ToArgb() == transColor.ToArgb())
                    {
                        x++;
                    }
                    posT = x;      //透明颜色的结束位置,即不透明颜色的起始位置

                    while (x < bm.Width && bm.GetPixel(x, y).ToArgb() != transColor.ToArgb())
                    {
                        x++;
                    }
                    posS = x - 1;      //不透明颜色的结束位置
                    if (posT <= posS)
                    {
                        //合并区域
                        myGraphicsPath.AddRectangle(new Rectangle(posT, y, x - posT, 1));
                    }
                }

            }
            return myGraphicsPath;
        }

生成了GraphicsPath 后,就可以设定现在控件的Region。

this.Region = new Region(gp) 按钮的形状就是图片的形状了。

本控件是从Label继承,利用Label来显示图片,减少开发的工作量,效果图如下(三个按钮)

 

不知怎样上传源文件,有需要的请留言。源代码

posted @   Lance Yang  阅读(4151)  评论(6编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示