zoukankan      html  css  js  c++  java
  • winform 自定义控件圆按钮插件

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace WGMF.TMS.CLIENT.ClientUI
    {
    public partial class RoundButton : Button
    {
    private int radius;//半径

    //圆形按钮的半径属性
    [CategoryAttribute("布局"), BrowsableAttribute(true), ReadOnlyAttribute(false)]
    public int Radius
    {
    set
    {
    radius = value;
    this.Height = this.Width = Radius;
    }
    get
    {
    return radius;
    }
    }

    private Image imageEnter;
    [CategoryAttribute("外观"), BrowsableAttribute(true), ReadOnlyAttribute(false)]
    public Image ImageEnter
    {
    set
    {
    imageEnter = value;
    }
    get
    {
    return imageEnter;
    }
    }

    private Image imageNormal;
    [CategoryAttribute("外观"), BrowsableAttribute(true), ReadOnlyAttribute(false)]
    public Image ImageNormal
    {
    set
    {
    imageNormal = value;
    BackgroundImage = imageNormal;
    }
    get
    {
    return imageNormal;
    }
    }

    //以下代码用于在VS中隐藏BackgroundImage属性,使得只能通过Diameter设置Height和Width
    [BrowsableAttribute(false)]
    public new Image BackgroundImage
    {
    get
    {
    return base.BackgroundImage;
    }
    set
    {
    base.BackgroundImage = value;

    }
    }

    //以下代码用于在VS中隐藏Size属性,使得只能通过Diameter设置Height和Width
    [BrowsableAttribute(false)]
    public new Size Size
    {
    get
    {
    return base.Size;
    }
    set
    {
    base.Size = value;

    }
    }

    public RoundButton()
    {
    Radius = 64;
    this.Height = this.Width = Radius;
    this.FlatStyle = FlatStyle.Flat;
    this.FlatAppearance.BorderSize = 0;
    this.BackgroundImage = imageEnter;
    this.BackgroundImageLayout = ImageLayout.Stretch;
    }

    //重写OnPaint
    protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
    {
    base.OnPaint(e);
    System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
    path.AddEllipse(0, 0, Radius, Radius);
    this.Region = new Region(path);
    }

    //重写OnMouseEnter
    //protected override void OnMouseEnter(EventArgs e)
    //{
    // Graphics g = this.CreateGraphics();
    // g.DrawEllipse(new Pen(Color.Blue), 0, 0, this.Width, this.Height);
    // g.Dispose();
    //}

    //重写OnSizeChanged
    protected override void OnSizeChanged(EventArgs e)
    {
    base.OnSizeChanged(e);
    if(Height != Radius)
    {
    Radius = Width = Height;
    }
    else if(Width != Radius)
    {
    Radius = Height = Width;
    }

    }

    //重写OnMouseEnter
    protected override void OnMouseEnter(EventArgs e)
    {
    base.OnMouseEnter(e);
    BackgroundImage = ImageEnter;
    }

    //重写OnMouseLeave
    protected override void OnMouseLeave(EventArgs e)
    {
    base.OnMouseLeave(e);
    BackgroundImage = ImageNormal;
    }

    }
    }

  • 相关阅读:
    Windows脚本 Bat批处理命令使用教程
    [Jobdu] 题目1420:Jobdu MM分水果
    排序算法的时间复杂度和空间复杂度
    (转) CS的顶级会议和期刊
    句柄是什么?1
    批处理for命令详解(转)
    cmd批处理常用符号详解
    【转帖】请问两个大于号>>代表什么意思?
    今天玩angry birds
    C/C++数组名与指针区别深入探索
  • 原文地址:https://www.cnblogs.com/chengyihardworking/p/12759766.html
Copyright © 2011-2022 走看看