C# 更改列表的值<;点>;项目
我正在申请绘制曲线。我通过单击鼠标来设置点,并将它们的位置添加到顶点列表中。现在我正在使用鼠标下移和鼠标上移来移动点。在鼠标按下时,我找出鼠标的位置是否在顶点列表中任何顶点周围的小正方形(4x4 px)中,然后在鼠标向上时,我想将垂直坐标更改为我举起鼠标按钮的坐标。但是我遇到了C# 更改列表的值<;点>;项目,c#,list,C#,List,我正在申请绘制曲线。我通过单击鼠标来设置点,并将它们的位置添加到顶点列表中。现在我正在使用鼠标下移和鼠标上移来移动点。在鼠标按下时,我找出鼠标的位置是否在顶点列表中任何顶点周围的小正方形(4x4 px)中,然后在鼠标向上时,我想将垂直坐标更改为我举起鼠标按钮的坐标。但是我遇到了List的问题,因为visualstudio说列表项无法更改,因为它不是变量。我怎样才能解决这个问题 List<Point> vertices = new List<Point>(); //list
List
的问题,因为visualstudio说列表项无法更改,因为它不是变量。我怎样才能解决这个问题
List<Point> vertices = new List<Point>(); //list of vertices
void canvas_MouseUp(object sender, MouseEventArgs e) {
if (!move) return; //if moving is off returns
vertices[indexOfMoved].X = e.X; //change X position to new position
vertices[indexOfMoved].Y = e.Y; //change Y position to new position
indexOfMovedLabel.Text = "Moved: ?";
}
列出顶点=新建列表()//顶点列表
void canvas_MouseUp(对象发送器,MouseEventArgs e){
if(!move)return;//如果禁用移动,则返回
顶点[indexOfMoved].X=e.X;//将X位置更改为新位置
顶点[indexOfMoved].Y=e.Y;//将Y位置更改为新位置
indexOfMovedLabel.Text=“移动:?”;
}
问题:
错误1无法修改“System.Collections.Generic.List.this[int]”的返回值,因为它不是变量
这是因为
点
是一个结构而不是一个对象。可以将结构视为分组值
因此,当您访问顶点[indexOfMoved]时,您会得到列表中内容的副本,而不是实际的“对象”
您可以这样做:
vertices[indexOfMoved] = new Point { X = e.X, Y = e.Y };
无法更改此值,因为点是结构。在给出很多细节之前;您需要将功能更改为以下内容:
private void canvas_MouseUp(object sender, MouseEventArgs e)
{
if (!move) return; //if moving is off returns
Point p = vertices[indexOfMoved];
p.X = e.X;
p.Y = e.Y;
vertices[indexOfMoved] = p;
indexOfMovedLabel.Text = "Moved: ?";
}
这是因为您使用的是结构。如果编译器没有给出任何警告,那么将在堆栈中创建一个新的结构,并对堆栈中的结构进行更改;这对列表中的结构没有影响。编译器发出警告以防止出现这种情况