c#使用不规则按钮

vs.net以及vc++6.0提供的按钮控件都是规则的矩形按钮,但是那些界面非常美观的软件是什么语言开发的呢?其实那些各种形状的按钮都可以使用c++以及c#进行开发,不过今天我要使用的方法是c#下的panel控件进行代替按钮的功能,幸好panel控件有MouseDown、MouseHover、MouseUp、MouseLeave等事件响应。下面讲一下使用方法:

       1. 添加命名空间引用:

                    using System.Drawing.Drawing2D;

       2.  双击panel控件,进入下面函数,添加类似代码:

private void panel1_Paint(object sender, PaintEventArgs e)
        {
            this.panel1.Cursor = Cursors.Hand;
            Bitmap bmpBob = (Bitmap)this.panel1.BackgroundImage;
            GraphicsPath graphicsPath = CalculateControlGraphicsPath(bmpBob);
            this.panel1.Region = new Region(graphicsPath);

        }

        3. 实现CalculateControlGraphicsPath()函数进行画图片,透明部分不画:

private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)
        {

            GraphicsPath graphicsPath = new GraphicsPath();

            Color colorTransparent = bitmap.GetPixel(0, 0);

            int colOpaquePixel = 0;

            for (int row = 0; row < bitmap.Height; row++)
            {

                colOpaquePixel = 0;

                for (int col = 0; col < bitmap.Width; col++)
                {

                    if (bitmap.GetPixel(col, row) != colorTransparent)
                    {

                        colOpaquePixel = col;

                        int colNext = col;

                        for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext++)
                            if (bitmap.GetPixel(colNext, row) == colorTransparent)
                                break;

                        graphicsPath.AddRectangle(new Rectangle(colOpaquePixel,
                         row, colNext - colOpaquePixel, 1));

                        col = colNext;
                    }
                }
            }

            return graphicsPath;
        }


       4. 实现响应函数:

          

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
               
        }
        private void panel1_MouseHover(object sender, EventArgs e)
        {
        
        }

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
           
        }

        private void panel1_MouseLeave(object sender, EventArgs e)
        {
      
        }

        private void panel1_Click(object sender, EventArgs e)
        {

        }


通过测试,只要panel响应事件处理的好,panel的效果要好于button!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值