我有一个列表<>;并且INT和我想要使用INT来指向List<>;现在应该更新,但不能';it’我

本文关键字:INT gt lt 更新 it 但不能 并且 列表 有一个 我想要 List | 更新日期: 2023-09-27 18:29:01

在Form1的顶层,我有:

List<float> cyclicSelectedIndex = new List<float>(2);
int currentCyclicIndex;

在构造函数中我有:

currentCyclicIndex = 0;

这是鼠标按下事件,当我点击一个点时,我得到了selectedIndex:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left) {
        label1.Text = e.X.ToString();
        label2.Text = e.Y.ToString();
        label1.Visible = true;
        label2.Visible = true;
        label3.Visible = true;
        label4.Visible = true;
        // find the index that is closest to the current mouse location
        MinDist = float.MaxValue;
        for (idx = 0; idx < Point_X.Count; ++idx) {
            float dx = Point_X[idx] - e.X;
            float dy = Point_Y[idx] - e.Y;
            float dist = (float)Math.Sqrt(dx * dx + dy * dy);
            if (dist < MinDist) {
                MinDist = dist;
                selectedIndex = idx;
            }
        }
        if (MinDist < 5) {
            mouseMove = true;
            OriginalX = Point_X[(int)selectedIndex];
            OriginalY = Point_Y[(int)selectedIndex];
        }
    }
} 

我希望在鼠标按下事件中以循环方式逻辑根据INT变量指向将selectedIndex添加到List。

一旦int为0,一旦为1。每次它都会包含或指向另一个选定的索引号,这意味着我点击了两个不同的点。

因此,如果我点击一个点,它将使用INT变量将selectedIndex点添加到索引0处的循环列表中。

然后,如果我点击任何其他点,它将使用INT变量将另一个selectedIndex添加到循环列表中的索引1中。

这个想法是制作一个循环列表,这样当我单击两个点时,它不会删除最后一个索引,而是会推送最后一个,所以一旦我单击一个点,它会将selectedIndex添加到索引0中,单击另一个点后,它会添加selectedIndex到索引0,并将另一个索引移动到1中,依此类推。循环。

我需要在鼠标按下事件中做一些事情来添加一些代码,并在我点击一个点时这样做,比如现在,我有selectedIndex,所以如果我在它后面点击另一个点,我会有一个新的变量和另一个点击的点索引,例如:selectedIndex1

然后我希望在鼠标按下事件中使用int变量添加到List<gt;每次使用int.

我有一个列表<>;并且INT和我想要使用INT来指向List<>;现在应该更新,但不能';it’我

将最后一个selectedIndex或selectedIndex1添加到列表中的位置时

即使在构造函数中指定了大小,列表在创建后也是空的。此空间只是最初为以后添加项目保留的空间。您必须使用Add添加项目。

List<int> list = new List<int>();
list.Add(10);
list.Add(7);

如果你有一个固定的大小,使用一个数组代替

int[] cyclicArray = new int[2];
int index = 0;

使用模运算,像这样增加索引

index = (index + 1) % 2;

索引将按如下方式循环:0、1、0、1。。。

cyclicArray[index] = someValue;

更新

可以使用PointF结构将x/y坐标存储为float值。

List<PointF> cyclicPoints = new List<PointF>(2);
int currentCyclicIndex;

找到OriginalX/Y后,如果元素的大小小于2,请将其添加到列表中,否则,请更改循环位置的现有元素。

PointF point = new PointF(OriginalX, OriginalY);
if (cyclicPoints.Count < 2) {
    cyclicPoints.Add(point);
} else {
    cyclicPoints[currentCyclicIndex] = point;
    currentCyclicIndex = (currentCyclicIndex + 1) % 2;
}

您可以访问列表中的点坐标,如下所示:

float x = cyclicPoints[0].X;
float y = cyclicPoints[0].Y;

更新#2

如果要存储索引,请将列表定义为int的列表,而不是floatPointF 的列表

List<int> cyclicSelectedIndex = new List<int>(2); 
if (cyclicSelectedIndex.Count < 2) {
    cyclicSelectedIndex.Add((int)selectedIndex);
} else {
    cyclicSelectedIndex[currentCyclicIndex] = (int)selectedIndex;
    currentCyclicIndex = (currentCyclicIndex + 1) % 2;
}