我如何检查要删除的点?

时间:2012-06-23 22:55:58

标签: c#

我有两个类型List的{​​{1}},其中我存储了名为intPoint_X的点坐标。

这是新类中的删除方法:

Point_Y

public void DeletePoint(int x, int y) { for (int i = 0; i < Point_X.Count; i++) { if ((i == x) && (i == y) || y == -1 || x == -1) { Point_X.RemoveAt(i); Point_Y.RemoveAt(i); } else { } } } x中,我得到了我点击的点的索引。如果我添加两个点并单击其中一个点,那么我得到两个点的索引,例如y为0,x为-1。

现在我正在运行y列表,我需要检查所有情况,并将我得到的索引与列表Point_XPoint_X中的索引进行比较,然后它应该删除我点击的点。

Point_Y似乎不起作用:if。 如果我在if ((i == x) && (i == y) || y == -1 || x == -1)中有两个点并且我点击第2点并尝试删除它,则第一次不会删除它。它会在我第二次点击时被删除。

这是pictureBox1中单击按钮的代码,我点击该按钮删除该点:

Form1

这是我在private void button3_Click(object sender, EventArgs e) { wireObject1.DeletePoint(cyclicSelectedIndex[0],cyclicSelectedIndex[1]); button3.Enabled = false; } 的{​​{1}}事件中点击我想要选择的点的代码:

pictureBox1

问题是新类中的MouseDown方法不会删除我点击的点,除非我点击它两次。


这是合乎逻辑的private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { label1.Visible = true; label4.Visible = true; // find the index that is closest to the current mouse location float t = wireObject1.GetIndexByXY(e.X, e.Y, 5); if (t == -1) { button3.Enabled = false; } else { button3.Enabled = true; { selectedIndex = t; mouseMove = true; OriginalX = wireObject1._point_X[(int)selectedIndex]; OriginalY = wireObject1._point_Y[(int)selectedIndex]; if (cyclicSelectedIndex.Count() == 2) { cyclicSelectedIndex[currentCyclicIndex] = (int)selectedIndex; currentCyclicIndex++; if (currentCyclicIndex == 2) { currentCyclicIndex = 0; } if ((cyclicSelectedIndex[0] == cyclicSelectedIndex[1]) || (cyclicSelectedIndex[0] == -1) || (cyclicSelectedIndex[1] == -1)) { button2.Enabled = false; } else { button2.Enabled = true; } for (int i = 0; i < wireObject1._connectionstart.Count; i++) { if ((wireObject1._connectionstart[i] == cyclicSelectedIndex[0] && wireObject1._connectionend[i] == cyclicSelectedIndex[1]) || (wireObject1._connectionstart[i] == cyclicSelectedIndex[1] && wireObject1._connectionend[i] == cyclicSelectedIndex[0])) { button2.Enabled = false; } } label13.Text = selectedIndex.ToString(); label13.Visible = true; label14.Visible = true; listView1.Items.Add(selectedIndex.ToString()).EnsureVisible(); } } } } } ,因为在某些情况下DeletePoint为1而if ((i == x) && (i == y))为0所以变量(x)永远不会也是0而且也是1所以我我被困在这里。

我不知道如何检查所有情况 - 例如y为1,i为0.可能还有其他方案需要介绍,但我认为问题出现在x语句的某处。


x = 1,y = 1

Point_X&gt;&gt;&gt; [0] = 331.0,[1] = 212.0

Point_Y&gt;&gt;&gt; [0] = 213.0,[1] = 212.0

i = 0

当我有两个点并且我点击第二个点时就是这种情况。 它没有对新类中的函数做任何事情,它没有删除这一点。

同样的第一点它没有删除它没有进入删除区域。 这是我使用阿列克谢Levenkov想法样本进行If检查。

现在在Form1中,当我点击pictureBox1中的一个点时,所以在鼠标按下事件中,我有一个变量(t),我计算新类中点的索引:

y

例如,如果我有一个点并且我点击它然后变量(t)= 0

然后List cyclicSelectedIndex在[0]中有两个单元格/位置我有0而在[1]中我有-1并且currentCyclicIndex现在是1而selectedIndex是0,即在鼠标按下事件的Form1中。鼠标按下事件只是标记我要删除的点。

在Form1按钮中单击我单击以删除该点:

if

cyclicSelectedIndex [0] = 0和cyclicSelectedIndex [1] = -1

所以在DeletePoint函数的新类中:

public float GetIndexByXY( int x , int y , float tol)
        {
            for (idx = 0; idx < Point_X.Count; ++idx)
            {
                float dx = Point_X[idx] - x;
                float dy = Point_Y[idx] - y;
                float dist = (float)Math.Sqrt(dx * dx + dy * dy);

                if (dist < tol) return idx;

            }
            return -1;
        }

x = 0且y = -1

现在我需要从列表中删除索引0和-1:Point_x和Point_Y,此列表中的每个索引都包含我想要删除的点的坐标。

1 个答案:

答案 0 :(得分:4)

您很可能希望将元素的与x / y进行比较,而不是将索引:

if ((Point_X[i] == x) && (Point_Y[i] == y) || y == -1 || x == -1)  

请注意,使用带有X / Y属性的类(如果您知道/有充分理由的结构)可能更好,并将它们存储在一个列表中:

class MyPoint { public int X;public int Y;}
List<MyPoint> point = new List<MyPoint>();