无法在列表中添加元素(在 C# 中)

pay*_*yam 3 c#

下面的代码我想将鼠标单击的坐标添加到列表中(我想在图片框中的不同位置单击 4 次)并且我想将鼠标单击的坐标存储在列表中

但此功能仅存储列表中的最后一个坐标(新坐标替换为最后一个坐标,并且不能添加到列表末尾)。我的列表始终只有一个元素(在列表中单击 4 次需要有 4 个坐标)(每次单击后,我在 textbox3 中都有新坐标,并且我在列表中也使用了列表 < Point > ,结果相同)感谢您的帮助

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        List<String> myPoints = new List<String>();
        textBox3.Text = e.X + " , " + e.Y;
        myPoints.Add(textBox3.Text);
     
    }
Run Code Online (Sandbox Code Playgroud)

kar*_*rin 6

在每个 MouseDown 上,您声明并初始化列表 - 因此您需要将其移到此方法之外 - 以便在此函数的范围结束后它不会被破坏,并且不会被重新初始化覆盖。

当您在作用域内声明变量时 - 在本例中是 pictureBox1_MouseDown 方法的作用域,一旦函数完成,它就会被销毁。

此外,如果您要在函数外部声明变量但在函数内部初始化它,如下所示:

List<String> myPoints;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{   
    myPoints = new List<String>();
    textBox3.Text = e.X + " , " + e.Y;
    myPoints.Add(textBox3.Text);         
}
Run Code Online (Sandbox Code Playgroud)

它不会被破坏,但它的内容会被删除,所以你最终会得到一个空列表。所以你需要这样做:

List<String> myPoints = new List<String>();
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{   
    textBox3.Text = e.X + " , " + e.Y;
    myPoints.Add(textBox3.Text);         
}
Run Code Online (Sandbox Code Playgroud)