我需要一个聪明的算法来检测点击的边缘,而不是查看图中的每个边缘。
正如您在上图所示,标有点的区域显示点击边缘不正确,因为它们与边缘重叠[2-> 3]
我尝试过GetChildAtPoint,但它只返回最顶层的孩子。
class Edge : Control {
public Movable From {get;set;}
public Movable To {get;set;}
...}
void Edge_Click(object sender, EventArgs e)
{
var clicked = (Edge)sender;
var mpc = this.PointToClient(MousePosition);
var clk0 = this.GetChildAtPoint(mpc) as Edge;
Edge clk = null;
if (clk0 != null) {
if (clk0.GetType() == typeof(Edge))
clk = clk0 as Edge;
}
MessageBox.Show(string.Format("({0}, {1}): {2} - {3}=>{4} - {5}: {6}",
mpc.X, mpc.Y, clicked.Parent.GetType().ToString(),
clicked.From.Text, clicked.To.Text,
(clicked == clk).ToString(),
clk == null ? "null" : clk.From.Text + "=>" + clk.To.Text));
}
如何在某些点上迭代所有子窗口/控件?
答案 0 :(得分:0)
我唯一能想到的就是遍历你的Form的Control Collection并检查每个控件的Bounds是否包含你的观点。
根据您拥有的控件数量,这可能适用于您,也可能不适用。
foreach (Control c in this.Controls )
{
if (c.Bounds.Contains(mpc))
{
//process the match here
}
}