当前位置: 首页 > news >正文

Winform画圆以及无边框窗体的移动

普通圆

在WinForms中绘制一个圆形,可以通过几种方式实现:

1. 使用ControlPaint

在窗体的Paint事件中使用ControlPaint.DrawCircle方法来绘制圆形。

private void Form1_Paint(object sender, PaintEventArgs e)
{int x = 100; // 圆心的X坐标int y = 100; // 圆心的Y坐标int radius = 50; // 圆的半径
​ControlPaint.DrawCircle(e.Graphics, Pens.Black, new Point(x, y), radius);
}

2. 使用Graphics类的DrawEllipse方法

Graphics类的DrawEllipse方法可以用来绘制圆形,当绘制一个半径相同的圆时,传入的宽度和高度参数应该相同。

private void Form1_Paint(object sender, PaintEventArgs e)
{int x = 100; // 圆心的X坐标int y = 100; // 圆心的Y坐标int diameter = 100; // 圆的直径
​e.Graphics.DrawEllipse(Pens.Black, x - diameter / 2, y - diameter / 2, diameter, diameter);
}

3. 填充圆形

如果您想要填充圆形,可以使用FillEllipse方法。

private void Form1_Paint(object sender, PaintEventArgs e)
{int x = 100; // 圆心的X坐标int y = 100; // 圆心的Y坐标int radius = 50; // 圆的半径
​e.Graphics.FillEllipse(Brushes.Red, x - radius, y - radius, radius * 2, radius * 2);
}

4. 使用自定义控件

创建一个自定义控件,重写OnPaint方法来绘制圆形。

public class CircleControl : Control
{protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);int radius = 50; // 圆的半径ControlPaint.DrawCircle(e.Graphics, Pens.Black, new Point(Width / 2, Height / 2), radius);}
}

然后您可以将这个自定义控件添加到窗体上。

5. 使用GDI+

如果需要更复杂的图形功能,可以使用System.Drawing.Drawing2D命名空间中的类。

private void Form1_Paint(object sender, PaintEventArgs e)
{using (GraphicsPath path = new GraphicsPath()){path.AddEllipse(0, 0, 100, 100); // 绘制一个100x100的圆e.Graphics.DrawPath(Pens.Black, path);}
}

需要确保在窗体的Paint事件中进行绘制操作。如果您在设计时希望圆形可见,可以在窗体的构造函数中添加一个调用Invalidate来触发Paint事件。

public Form1()
{InitializeComponent();this.Paint += new PaintEventHandler(Form1_Paint);this.Invalidate(); // 触发窗体重绘
}

无边框窗体的移动

 private void Form_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left)//判断鼠标左键是否被按下{mouseOff = new Point(-e.X, -e.Y);//得到变量的值leftFlag = true;//标记鼠标左键的状态}}private void Form_MouseMove(object sender, MouseEventArgs e)//鼠标移动触发MouseMove事件{if (leftFlag)//判断鼠标左键有没有被按下{Point mouseSet = Control.MousePosition;//获取屏幕中鼠标所在的位置mouseSet.Offset(mouseOff.X, mouseOff.Y);//设置移动后的位置Location = mouseSet;}}private void Form_MouseUp(object sender, MouseEventArgs e)//鼠标左键抬起后触发MouseUp事件{if (leftFlag){leftFlag = false;//释放鼠标后标注为false;}}

然后绑定事件

就可以移动

http://www.lryc.cn/news/421675.html

相关文章:

  • 如何高效记录并整理编程学习笔记?
  • docker的安装和常用命令
  • haproxy 7000字配图超详细教程 从小白到入门
  • 使用 LangChain 掌握检索增强生成 (RAG) 的终极指南:5、将自然语言问题转换为结构化查询
  • 浅析JavaScript 堆内存及其通过 Chrome DevTools 捕获堆快照的方法
  • C++学习笔记----2、使用C++进行优雅编程(五)----命名
  • Element UI顶部导航栏与左侧导航栏联动实现~
  • ECMAScript6模板字面量:反引号、${}占位符的使用
  • 网关与AWS云心跳周期,网关断电或者网络不稳定的离线机制
  • 【代码随想录训练营第42期 Day26打卡 贪心Part1 - LeetCode 455.分发饼干 376. 摆动序列 53. 最大子序和
  • 利用有限元法(FEM)模拟电磁场与样品的相互作用
  • 如何保持git主分支树的整洁
  • Datawhale X 魔搭 AI夏令营 Task1 从零入门AI生图原理实践笔记
  • Python中将代码打包成exe文件
  • 【C++ 面试 - 基础题】每日 3 题(十三)
  • Android中的Binder
  • 记录一次.gitignore 失效问题
  • Eclipse 工作空间
  • [240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能
  • Flutter中的异步编程
  • vue3 路由带传参跳转;刷新后消失。一次性参数使用。
  • Unity新输入系统结构概览
  • 18104 练习使用多case解题
  • 【AI人工智能】文心智能体 - 你的专属车牌设计师
  • Linux-服务器硬件及RAID配置实验
  • 白屏检测系统的设计与实现
  • Real-Time Open-Vocabulary Object Detection:使用Ultralytics框架进行YOLO-World目标检测
  • 区块链用什么编程语言实现?
  • 【网络编程】UDP通信基础模型实现
  • Docker Compose 常用命令详解