winform控件之Button

Button控件是一个常用的控件,这里我们通过自定义一个圆形Button控件来学习

 

1.自定义Button用法

1.1界面布局

界面布局就是一个Button,不过是我们自定以的Button类,叫做mybutton

首先在布局界面中创建一个Button,然后把对应的Button改为我们自己的mybutton,代码如下

        private void InitializeComponent()
        {
            //构建我们自己的mybutton对象
            this.Last = new WindowsFormsApplication1.mybutton();
            this.SuspendLayout();
            // 
            // Last
            // 
            this.Last.Location = new System.Drawing.Point(86, 101);
            this.Last.Name = "Last";
            this.Last.Size = new System.Drawing.Size(100, 100);
            this.Last.TabIndex = 7;
            this.Last.Text = "Last";
            this.Last.UseVisualStyleBackColor = true;
            // 
            // FormMain
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(290, 333);
            this.Controls.Add(this.Last);
            this.Name = "FormMain";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }

        #endregion

        //成员变量为mybutton类型
        private mybutton Last;

需要更改的一共有两处,一处是成员变量的类型,另一处是给last赋值是new的对象是mybutton对象,这两处改好之后,界面上就是mybutton类型所绘制的样子了,这里先展示下效果,效果图如下

winform控件之Button_第1张图片

1.2用法示例

其实自定义Button,就是我们继承一个Button类,然后重新绘制图形,大概有这么几步

1.自定义mybutton类继承自button

2.重写OnPaint函数

3.创建一个新的Region覆盖原来的Region

代码如下

public class mybutton : Button
    {
        private bool mounseenter = false;

        protected override void OnPaint(PaintEventArgs pevent)
        {
            base.OnPaint(pevent);

            //更改控件尺寸
            this.Width = 100;
            this.Height = 100;

            //更改控件区域为直径100的圆形
            System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
            path.AddEllipse(0, 0, 100, 100);
            this.Region = new Region(path);            
            
            Graphics g = pevent.Graphics;
            g.SmoothingMode = SmoothingMode.AntiAlias;//抗锯齿,使边缘平滑
            RectangleF rect = new RectangleF(0, 0, this.Width, this.Height);

            //填充控件内部
            SolidBrush sb = new SolidBrush(Color.Red);
            //g.FillEllipse(sb, rect);
            g.FillRegion(sb, this.Region);
            
            //绘制控件边框
            //如果鼠标移入则为粉色,否则为黄色
            if (mounseenter == false)
            {
                Pen p = new Pen(Color.Yellow);
                p.Width = 5.0F;                //画笔宽度
                g.DrawPath(p, path);
                //g.DrawEllipse(p, rect);
            }
            else 
            {
                Pen p = new Pen(Color.Pink);
                p.Width = 5.0F;                //画笔宽度
                g.DrawPath(p, path);
                //g.DrawEllipse(p, rect);
            }

            //绘制文字
            RectangleF rectstring = new RectangleF(10, this.Height / 2 - 10, this.Width, 20);
            g.DrawString("MyButton", new Font("Verdana", 12), new SolidBrush(Color.Black), rectstring);
       }

        //鼠标移入
        protected override void OnMouseEnter(EventArgs e)
        {
            base.OnMouseEnter(e);
            mounseenter = true;
        }

        //鼠标移出
        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);
            mounseenter = false;
        }

        protected override void OnClick(EventArgs e)
        {
            //base.OnClick(e);
            MessageBox.Show("点击事件");
        }
    }

这里我们重新绘制了一个直径为100的原型,然后使用红色填充内部,黄色绘制边缘,并且绘制了一段文字在图形上

我们使用Graphics类里面的函数绘制的时候,基本上会用到这样集中类

1.Drawxxx,这些方法需要的对象都是Pen对象,基本都是绘制线段,边框之类的

2.Fillxxx,这些方法需要的对象都是Brush对象,基本上都是填充一篇区域的

上述代码中我们使用了FillRegion来填充内部区域,同样的也可以使用FillEllipse来填充内部区域

边框的绘制也是同理,上述代码中我们使用DrawPath来绘制边框,同样也可以使用DrawEllipse来绘制边框

只不过需要提前创建好rect。

 

这里我们还重写了鼠标事件,在鼠标移入移出的时候,边框颜色会发生改变

重写了点击事件,当我们点击按键的时候,会弹出一个提示框

 

Button控件基本上就是这些,欢迎批评指正

 

 

参考文献

C# Graphics类详解

WinForm(C#)自定义控件之——RoundButton(圆形按钮)

你可能感兴趣的:(winform,winform,C#)