如何知道我点击了哪个数字?

时间:2014-11-08 16:47:17

标签: c# graphics linked-list

我绘制了一个正交链表,看起来像这样。

orthogonal linked list

我想知道我是否点击任意节点(矩形)的INSIDE并告诉我带有消息框的女巫矩形,其中包含数据或数字

使用此方法绘制节点:

public void Dnode(float px, float py, int data)
    {
        Pen penBlack= new Pen(Color.Black, 1);
        RectangleF[] rects =
        {
            new RectangleF(px, py, 50.0F, 50.0F), 
            new RectangleF(px + 10, py + 10, 30.0F, 30.0F)
        };
        G.DrawRectangles(penBlack, rects);
        G.DrawLine(penBlack, px, py, px + 10, py + 10);
        G.DrawLine(penBlack, px + 50, py, px + 40, py + 10);
        G.DrawLine(penBlack, px + 50, py + 50, px + 40, py + 40);
        G.DrawLine(penBlack, px, py + 50, px + 10, py + 40);
        if (data!= -1)
            G.DrawString(data.ToString(), new Font("Arial", 10, FontStyle.Bold), Brushes.Black,
                new Point((int) px + 16, (int) py + 14));
        else
            G.DrawString("*", new Font("Arial", 12, FontStyle.Bold), Brushes.Red,
                new Point((int) px + 19, (int) py + 18));
    }

每个节点都有此

public class Node
{
    public int data;
    public int pointX, pointY;
    public Node left, right, up, down;

    public Node(int x)
    {
        data = x;
        left = right = up = down = null;
        pointX = 0;
        pointY = 0;
    }
}

我的想法是获得点击我在主窗体中点击事件然后将其与列表中的每个节点进行比较,然后我意识到它只有在我点击了特定点时才能工作

节点类

1 个答案:

答案 0 :(得分:1)

您可以向节点类添加bool isClicked(float x, float y)方法,并查看带有(x,y)坐标的点是否落入为每个节点绘制的方格中。

为此,x和y需要尊重所有以下条件:

  • x&gt; = px; x <= px + 50.0F
  • y&gt; = py; y&lt; = py + 50.0F