如何使用winforms在C#中的鼠标点击上绘制球?
我现在有下面的代码。当窗体加载时,将创建一个球并用鼠标移动,但现在我想在鼠标单击上创建一个球(FilledEllipse),然后将其显示在单击的位置。总体目标是让它开始在屏幕上移动和反弹,这样我可以创建多个,但首先要做的是。我正在使用我创建的一个Ball类,它只设置球的半径如何使用winforms在C#中的鼠标点击上绘制球?,c#,winforms,C#,Winforms,我现在有下面的代码。当窗体加载时,将创建一个球并用鼠标移动,但现在我想在鼠标单击上创建一个球(FilledEllipse),然后将其显示在单击的位置。总体目标是让它开始在屏幕上移动和反弹,这样我可以创建多个,但首先要做的是。我正在使用我创建的一个Ball类,它只设置球的半径 public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Pain
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Paint += Form1_Paint;
this.MouseMove += Form1_MouseMove;
this.MouseClick += Form1_MouseClick;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Point local = this.PointToClient(Cursor.Position);
e.Graphics.FillEllipse(Brushes.Red, local.X , local.Y , 20, 20);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Invalidate();
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
Random random = new Random();
Ball myBall = new Ball(random.Next(1, 5));
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
创建一个列表
并将鼠标单击时创建的球添加到此列表
在OnPaint中,绘制列表中的每个球
在OnClick中还调用Refresh,以刷新列表
我在你的代码中添加了一些东西:
public partial class Form1 : Form
{
// Create list
List<Ball> _balls = new List<Ball>();
public Form1()
{
InitializeComponent();
this.Paint += Form1_Paint;
this.MouseMove += Form1_MouseMove;
this.MouseClick += Form1_MouseClick;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Point local = this.PointToClient(Cursor.Position);
e.Graphics.FillEllipse(Brushes.Red, local.X , local.Y , 20, 20);
// Paint each stored ball
foreach(var ball in _balls) {
// paint ball
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Invalidate();
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
Random random = new Random();
Ball myBall = new Ball(random.Next(1, 5));
// Store ball, and refresh screen
_balls.Add(myBall);
Invalidate()
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
公共部分类表单1:表单
{
//创建列表
列表_balls=新列表();
公共表格1()
{
初始化组件();
此.Paint+=Form1_Paint;
this.MouseMove+=Form1\u MouseMove;
this.MouseClick+=Form1\u MouseClick;
}
私有void Form1_Paint(对象发送器、PaintEventArgs e)
{
Point local=此.PointToClient(游标位置);
e、 图形。填充椭圆(画笔。红色,局部。X,局部。Y,20,20);
//为每个储存的球上漆
foreach(var ball in_balls){
//油漆球
}
}
私有void Form1\u MouseMove(对象发送方,MouseEventArgs e)
{
使无效();
}
private void Form1\u鼠标单击(对象发送方,鼠标目标e)
{
随机=新随机();
Ball myBall=新球(随机。下一个(1,5));
//存储球,并刷新屏幕
_添加(myBall);
使无效
}
私有void Form1\u加载(对象发送方、事件参数e)
{
}
}
要移动球,请在“OnPaint”中,在绘制前计算(每个球的)新位置
考虑自上次绘制以来的时间,以创建灵活的运动
我也可以建议你看看WPF。此库是Windows窗体的替代品,包含许多用于绘画和动画的解决方案。如果您想用C制作游戏,我建议您看看XNA。