フォームに2つの(VisualBasic.PowerPacks)LineShapesがあります。
代替テキストhttp://lh4.ggpht.com/_1TPOP7DzY1E/S2cIJan7eHI/AAAAAAAADAw/qwA0jFHEbBM/s800/intersection.png
それらの1つをクリックすると、特定のコンテキストメニューが表示されます。線はユーザーが移動できます。コンテキストメニューは行に関連付けられています。ただし、ユーザーが交点をクリックした場合(存在する場合)、他のメニューを表示する必要があります。これにより、アクションを実行する交線の1つが選択されます。
ここで、クリックポイントで2つ(またはそれ以上)の線が交差していることを検出する方法を考えます。この場合、他のコンテキストメニューが表示されるはずだからです。
私がやろうとしたこと:
private void shapeContainer1_MouseDown(object sender, MouseEventArgs e)
{
// right click only
if (e.Button == MouseButtons.Right)
{
LineShape target =
(shapeContainer1.GetChildAtPoint(e.Location) as LineShape);
if (target != null)
{
Console.WriteLine(new Point(target.X1, target.Y1));
}
}
}
コンテナにはLineShapesしかないと思います。つまり、LineShapeがマウスの下にある場合、ShapeContainerはMouseDownイベントを発生させません。
しかし、このコードは私にmostTop行しか与えませんが、他のリストも必要です。