如何检查pictureBox上的两个点是否连接,然后启用true按钮4

本文关键字:连接 是否 然后 启用 按钮 true 检查 何检查 pictureBox 两个 | 更新日期: 2023-09-27 18:23:36

这是pictureBox1鼠标按下事件的Form1中的代码:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                label1.Visible = true;
                label4.Visible = true;
                if (wireObject1 == null)
                {
                }
                else
                {
                    float t = wireObject1.GetIndexByXY(e.X, e.Y, 5);
                    if (t == -1)
                    {
                        button3.Enabled = false;
                    }
                    else
                    {
                        if (pointDeletion == false)
                        {
                            button3.Enabled = true;
                        }
                        else
                        {
                            button3.Enabled = false;
                        }
                        {
                            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]) ||
                                        wireObject1._connectionstart[i] == cyclicSelectedIndex[0] || wireObject1._connectionend[i] == cyclicSelectedIndex[1] ||
                                         wireObject1._connectionstart[i] == cyclicSelectedIndex[1] || wireObject1._connectionend[i] == cyclicSelectedIndex[0])
                                    {
                                        button3.Enabled = false;
                                    }
                                    if ((wireObject1._connectionstart[i] == cyclicSelectedIndex[0] && wireObject1._connectionend[i] == cyclicSelectedIndex[1]) ||
                                       (wireObject1._connectionstart[i] == cyclicSelectedIndex[1] && wireObject1._connectionend[i] == cyclicSelectedIndex[0]))
                                    {
                                        button2.Enabled = false;
                                    }
                                    if ((wireObject1._connectionstart[i] == cyclicSelectedIndex[0]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[1]) ||
                                        (wireObject1._connectionstart[i] == cyclicSelectedIndex[1]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[1]) ||
                                        (wireObject1._connectionstart[i] == cyclicSelectedIndex[0]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[0]) ||
                                        (wireObject1._connectionstart[i] == cyclicSelectedIndex[1]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[0]))
                                    {
                                        button4.Enabled = true;
                                    }
                                    else
                                    {
                                        button4.Enabled = false;
                                    }  
                                }
                                label13.Text = selectedIndex.ToString();
                                label13.Visible = true;
                                label14.Visible = true;
                                listView1.Items.Add(selectedIndex.ToString()).EnsureVisible();
                            }
                        }
                    }
                }
            }
        }

我有一个按钮单击事件,当我单击时,它在pictureBox1上添加(绘制)一个点。所以我加/点击6次,加6分。现在我可以在pictureBox1区域拖动它们了。然后我点击另一个按钮在两个选定的点之间画一条线。当我在pictureBox鼠标向下事件中单击一个点时,我选择一个点,然后选择第二个点,并单击以用线连接它们。

最后,我有6个点和3条线,每个点之间用一条绘制的线连接。

现在,我想在pictureBox鼠标向下事件中做的是,当我选择两个点时,它们之间有一条线连接,就变成button4.enabled = true。如果我点击了任何未连接的点,则转到button4.enabled = false

所以我试着这样做:

if ((wireObject1._connectionstart[i] == cyclicSelectedIndex[0]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[1]) ||
                                        (wireObject1._connectionstart[i] == cyclicSelectedIndex[1]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[1]) ||
                                        (wireObject1._connectionstart[i] == cyclicSelectedIndex[0]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[0]) ||
                                        (wireObject1._connectionstart[i] == cyclicSelectedIndex[1]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[0]))
                                    {
                                        button4.Enabled = true;
                                    }
                                    else
                                    {
                                        button4.Enabled = false;
                                    }  

但它并不是在所有情况下都有效。

现在:

wireObject1._connectionstartList<int>wireObject1._connectionend也是List<int>,它们包含两点之间每条连接/线的起点和终点。

CCD_ 11是CCD_。[0]包含第一个单击/选择的点和[1]第二个选择/单击的点。

当我点击一个点时,我做了什么:wireObject1.GetIndexByXY它找到了我点击的点的最近的中心,所以我知道我选择了我想要的这个点,而不是它附近的一个。


最后,我需要的是在点击/选择两个点时检查它们之间是否有一条线(连接)button4.enabled = true ELSE button4.enabled = false

(我知道代码和描述已经很长时间了,我很抱歉,试图让它变得最短)

如何检查pictureBox上的两个点是否连接,然后启用true按钮4

您需要进行调试,看看出了什么问题。如果你一步一步地做,它应该会让你眼前一亮。看起来,你在做wireObject1.GetIndexByXY(e.X, e.Y, 5);开关可能没有返回正确的值,或者你的if语句在做一些有线的事情,比如检查一个点是否连接到它自己:

wireObject1._connectionstart[i] == cyclicSelectedIndex[1]) && (wireObject1._connectionend[i] == cyclicSelectedIndex[1]

一个索引怎么可能是一个点的起点和终点呢。长话短说,逐行运行该方法,查看索引是否正确插入到数据结构中,并检查if语句中的变量。

我已经准备好了合适的IF。刚刚添加了按钮4.启用了true或false和break;

if ((wireObject1._connectionstart[i] == cyclicSelectedIndex[0] && wireObject1._connectionend[i] == cyclicSelectedIndex[1]) ||
                                       (wireObject1._connectionstart[i] == cyclicSelectedIndex[1] && wireObject1._connectionend[i] == cyclicSelectedIndex[0]))
                                    {
                                        button2.Enabled = false;
                                        button4.Enabled = true;
                                        break;
                                    }
                                    else
                                    {
                                        button4.Enabled = false;
                                    }

从我目前所做的测试来看,一切似乎都很顺利。我希望我是对的。

谢谢。