普通圆
在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;
}
}
然后绑定事件
就可以移动