如何 link 带有基于图表的线条的按钮

How to link buttons with lines based in graphs

我的表单中有一个 "button creator"(创建我自己的自定义按钮),我需要在表单中创建一些按钮后,单击 2 个随机按钮进行连接,然后用一条简单的线 (可以是 System.Drawing.Pen)。我应该使用某种图形逻辑连接来做到这一点。但我不知道我该怎么做。任何代码建议?谢谢

这是一个例子:

// two variables we will need:
Button lastBtn = null;
List<Tuple<Button, Button>> buttons = new List<Tuple<Button, Button>>();

void commonButton_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    if (btn == null) return;
    if (lastBtn == null) { lastBtn = btn; return; }
    else if (btn == lastBtn) { lastBtn = null; return; }
    else { buttons.Add(new Tuple<Button, Button>(lastBtn, btn)); lastBtn = null; }
    Invalidate();
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
    foreach ( Tuple<Button, Button> t in buttons)
    {
        e.Graphics.DrawLine(Pens.RoyalBlue, t.Item1.Location, t.Item2.Location);
    }
}

创建按钮时,每个按钮都与常见的点击事件挂钩:

yourButtonClass btn = new yourButtonClass()..
..
btn.Click += commonButton_Click;

这总是在左上角画线。使用中间位置或边缘上的智能位置,如果留给您的话,它离另一个按钮最近。在后一种情况下,如果需要,您还可以在笔上添加开始和结束。