C# 如何绘制按钮移动的轨迹?

C# 如何绘制按钮移动的轨迹?,c#,winforms,trail,C#,Winforms,Trail,我正在尝试制作一个应用程序,通过轨迹栏控制3个不同按钮的移动 按钮向中心点移动,并以圆形方式移动。我打算做的是画出按钮运动的轨迹:每次按钮改变它“着陆”的像素的位置颜色时 我在一个WFA项目C#中编写代码 这是按钮移动的代码: private void trackBar1_Scroll(object sender, EventArgs e) { //161, 114 double sinX, cosX, sinY, cosY, sinZ, cosZ;

我正在尝试制作一个应用程序,通过
轨迹栏
控制3个不同按钮的移动

按钮向中心点移动,并以圆形方式移动。我打算做的是画出按钮运动的轨迹:每次按钮改变它“着陆”的像素的位置颜色时

我在一个WFA项目C#中编写代码

这是按钮移动的代码:

private void trackBar1_Scroll(object sender, EventArgs e)
    {
        //161, 114
        double sinX, cosX, sinY, cosY, sinZ, cosZ;
        sinX = Math.Sin(trackBar1.Value / 57.29);
        cosX = Math.Cos(trackBar1.Value / 57.29);
        sinX = Math.Truncate((360 - trackBar1.Value)/4 * sinX);
        cosX = Math.Truncate((360 - trackBar1.Value) / 4 * cosX);
        button1.Location = new System.Drawing.Point(161 + (int)sinX, 114 + (int)cosX);

        sinY = Math.Sin((trackBar1.Value + 120) / 57.29);
        cosY = Math.Cos((trackBar1.Value + 120)/ 57.29);
        sinY = Math.Truncate((360 - trackBar1.Value) / 4 * sinY);
        cosY = Math.Truncate((360 - trackBar1.Value) / 4 * cosY);
        button2.Location = new System.Drawing.Point(161 + (int)sinY, 114 + (int)cosY);

        sinZ = Math.Sin((trackBar1.Value + 240) / 57.29);
        cosZ = Math.Cos((trackBar1.Value + 240) / 57.29);
        sinZ = Math.Truncate((360 - trackBar1.Value) / 4 * sinZ);
        cosZ = Math.Truncate((360 - trackBar1.Value) / 4 * cosZ);
        button3.Location = new System.Drawing.Point(161 + (int)sinZ, 114 + (int)cosZ);

    } 

在表单中生成一个可以保存所有点的字段 列表轨迹=新列表()

在构造函数中保存列表中按钮的第一个位置:

public MyForm()
{
    InitializeComponent();
    // Make sure you put this code after the InitializeComponent:
    this.track.Add(button3.Location)
}
然后将按钮的位置存储在移动事件列表中:

private void trackBar1_Scroll(object sender, EventArgs e)
{
    //rest of your code
    button3.Location = new System.Drawing.Point(161 + (int)sinZ, 114 + (int)cosZ);
    this.track.Add(button3.Location)
} 
然后按如下方式处理表单。绘制方法:

private void MyForm_Paint(object sender, PaintEventArgs e)
{
    Pen pen = new Pen(Color.Red);
    foreach(Point point in track)
    {
        Rectangle rect = new Rectangle(point, new Size(1,1));
        e.Graphics.DrawRectangle(pen, rect);
    }
}

我相信人们会的,但是你刚才解释了你的申请,它非常不清楚你想做什么,它在做什么,或者你是如何做的。Id sagest粘贴你预期行为的代码或图像或其他东西它做了我希望它做的事情,但过了一段时间后变得非常慢。(用箭头键移动轨迹栏并绘制)有什么想法吗?我想我理解为什么,每次我滚动它只会向列表中添加更多的项目,这意味着每次我滚动它也必须绘制以前的像素,所以大约360*3像素。我以前没有这样做过,但从我的头脑中你可以使用这个:
Parallel.ForEach(track,x=>{Rectangle rect=new Rectangle(p,new Size(1,1));e.Graphics.DrawRectangle(笔,矩形);}