圆形按钮

时间:2010-09-14 10:43:12

标签: c# winforms

如何制作圆形按钮而不是传统的矩形。

我正在使用winforms(2.0)

6 个答案:

答案 0 :(得分:27)

首先上课。给它命名圆形按钮。 然后直接编写代码:

using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
    public class RoundButton : Button
    {
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            GraphicsPath grPath = new GraphicsPath();
            grPath.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height);
            this.Region = new System.Drawing.Region(grPath);
            base.OnPaint(e);
        }
    }

}

然后构建您的应用程序并关闭它。 现在转到工具箱,您将看到一个名为RoundButton的控件。 然后将药物放在你的窗体上并测试它......享受!

答案 1 :(得分:5)

代码项目有很多关于这类事情的文章,特别是文章RoundButton Windows Control - Ever Decreasing Circles可能会引起关注,因为它表明你必须做不同类型的圆形按钮。

答案 2 :(得分:2)

我需要根据默认的Windows窗体按钮实现自己的Button类。 类似于thisthis的内容。您可以使用谷歌查找更多示例。

答案 3 :(得分:0)

        GraphicsPath p = new GraphicsPath();
        p.AddEllipse(1, 1, button1.Width - 4, button1.Height - 4);
        button1.Region = new Region(p);

答案 4 :(得分:0)

这就是你想要的

public class RoundButton : Control
{
    private readonly Label lbl;
    public RoundButton() : base()
    {
        lbl = new Label
        {
            Text = Text,
            ForeColor = ForeColor,
            BackColor = BackColor,
            Font = Font
        };
        CenterInParent();
    }
    private void CenterInParent()
    {
        lbl.Left = (Width - lbl.Width) / 2;
        lbl.Top = (Height - lbl.Height) / 2;
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        GraphicsPath grPath = new GraphicsPath();
        grPath.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height);
        Region = new Region(grPath);
        base.OnPaint(e);
    }
    protected override void OnMove(EventArgs e)
    {
        CenterInParent();
        base.OnMove(e);
    }
    protected override void OnTextChanged(EventArgs e)
    {
        lbl.Text = Text;
        base.OnTextChanged(e);
    }
    protected override void OnForeColorChanged(EventArgs e)
    {
        lbl.ForeColor = ForeColor;
        base.OnForeColorChanged(e);
    }
    protected override void OnBackColorChanged(EventArgs e)
    {
        lbl.BackColor = BackColor;
        base.OnBackColorChanged(e);
    }
    protected override void OnFontChanged(EventArgs e)
    {
        lbl.Font = Font;
        base.OnFontChanged(e);
    }
}

优点:

  • 不削减

  • 圆形

缺点:

  • 圆形按钮的错误设计器加载器

答案 5 :(得分:0)

INT_MIN + INT_MAX

您可以这样称呼它:

public class OptionsMenu : Button
{
    public OptionsMenu(int NoOfOptions, Point Location, ControlCollection controls,
                       Size ButtonSize, int DistanceBetweenOptions)
    {
        Button[] buttons = new Button[NoOfOptions];

        for (int i = 0; i < NoOfOptions; i++)
        {
            buttons[i] = new Button()
            {
                Size = ButtonSize,
            };

            GraphicsPath p = new GraphicsPath();
            p.AddEllipse(1, 1, buttons[i].Width - 4, buttons[i].Height - 4);
            buttons[i].Region = new Region(p);
            buttons[i].Location = new Point(Location.X, Location.Y + DistanceBetweenOptions * i);

            controls.Add(buttons[i]);
        }
    }
}