首页 > 解决方案 > 不能在列表中添加元素(在 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);
     
    }

标签: c#

解决方案


在每个 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);         
}

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

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

推荐阅读