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;
     }
 }

然后绑定事件

就可以移动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值