如何检查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._connectionstart
是List<int>
,wireObject1._connectionend
也是List<int>
,它们包含两点之间每条连接/线的起点和终点。
CCD_ 11是CCD_。[0]包含第一个单击/选择的点和[1]第二个选择/单击的点。
当我点击一个点时,我做了什么:wireObject1.GetIndexByXY它找到了我点击的点的最近的中心,所以我知道我选择了我想要的这个点,而不是它附近的一个。
最后,我需要的是在点击/选择两个点时检查它们之间是否有一条线(连接)button4.enabled = true
ELSE button4.enabled = false
。
(我知道代码和描述已经很长时间了,我很抱歉,试图让它变得最短)
您需要进行调试,看看出了什么问题。如果你一步一步地做,它应该会让你眼前一亮。看起来,你在做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;
}
从我目前所做的测试来看,一切似乎都很顺利。我希望我是对的。
谢谢。