达永编程网

程序员技术分享与交流平台

256.C# 绘制一个圆型窗体

摘要


在C# 绘制一个可拖拽的圆型窗体,需要用到以下方法与属性

方法:

  1. OnPaint(PaintEventArgs e):此方法用于自定义窗体的绘制。您可以在此方法中使用e.Graphics对象来执行自定义绘图操作。
  2. OnLoad(EventArgs e):在窗体加载时触发的事件,可用于执行初始化操作。
  3. OnMouseDown(MouseEventArgs e):在鼠标按下时触发的事件。通常用于实现拖动窗体的功能。
  4. OnMouseMove(MouseEventArgs e):在鼠标移动时触发的事件。通常用于处理拖动窗体的逻辑。
  5. OnMouseUp(MouseEventArgs e):在鼠标释放时触发的事件。通常用于处理拖动窗体的结束。

属性:

  1. FormBorderStyle:窗体的边框样式。您可以将其设置为None以创建无边框窗体。
  2. BackColor:窗体的背景颜色。
  3. Region:窗体的区域,可以用来定义窗体的形状。通常与GraphicsPath结合使用。
  4. Location:窗体在屏幕上的位置。通过设置此属性,可以移动窗体到不同的位置。
  5. Size:窗体的大小。
  6. WidthHeight:窗体的宽度和高度。
  7. DoubleBuffered:启用双缓冲以减少窗体绘制时的闪烁。
  8. Text:窗体的标题文本。
  9. TopMost:窗体是否显示在所有其他窗体的前面。

正文


public partial class Form1 : Form
{
    private Point offset; // 用于存储鼠标按下时的偏移量
    private bool isDragging = false; // 用于跟踪是否正在拖动窗体
    public Form1()
    {
        InitializeComponent();

        this.FormBorderStyle = FormBorderStyle.None;
        this.Opacity= 0.8;
        this.DoubleBuffered = true; // 双缓冲以减少闪烁

        // 鼠标按下事件处理
        this.MouseDown += (sender, e) =>
        {
            if (e.Button == MouseButtons.Left)
            {
                offset = e.Location;
                isDragging = true;
            }
        };

        // 鼠标移动事件处理
        this.MouseMove += (sender, e) =>
        {
            if (isDragging)
            {
                // 移动窗体到新位置
                Point newLocation = this.Location;
                newLocation.X += e.X - offset.X;
                newLocation.Y += e.Y - offset.Y;
                this.Location = newLocation;
            }
        };

        // 鼠标释放事件处理
        this.MouseUp += (sender, e) =>
        {
            if (e.Button == MouseButtons.Left)
            {
                isDragging = false;
            }
        };

    }

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

        GraphicsPath path = new GraphicsPath();
        path.AddEllipse(0, 0, this.Width, this.Height);

        // 设置窗体的Region为圆形区域
        this.Region = new Region(path);

        using (Pen borderPen = new Pen(Color.Red, 5)) // 定义边框宽度和颜色
        {
            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // 启用抗锯齿
            e.Graphics.DrawEllipse(borderPen, 2, 2, this.Width - 4, this.Height);ss
        }



    }
}

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言