C# 如何将按钮与基于图形的线链接

C# 如何将按钮与基于图形的线链接,c#,button,graph,custom-controls,C#,Button,Graph,Custom Controls,我的表单中有一个“按钮创建者”(创建我自己的自定义按钮),我需要在表单中创建一些按钮后,单击两个随机按钮,然后用一条简单的线连接(可以是System.Drawing.Pen)。我应该使用某种图形逻辑连接来实现。但我不知道该怎么做。有代码建议吗?谢谢以下是一个示例: // two variables we will need: Button lastBtn = null; List<Tuple<Button, Button>> buttons = new List<T

我的表单中有一个“按钮创建者”(创建我自己的自定义按钮),我需要在表单中创建一些按钮后,单击两个随机按钮,然后用一条简单的线连接(可以是
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);
    }
}

这将始终从左上角和左上角绘制直线。如果留给您,则使用中间按钮或边缘上的智能移动按钮最接近另一个按钮。在后一种情况下,如果愿意,您也可以在画笔上添加起始和结束大写。

对表单的绘制事件进行编码,并在知道实际需要的内容后在那里绘制一些e.Grphics.DrawLines(..)。如果你不明白“某种图形逻辑连接”意味着什么,那么你并不孤单。我的问题不在于线条,而在于把它们放在哪里。因为我应该点击两个按钮,让它们“自动连接”。明白@TaW?明白。因此,您需要a)记住上次单击的按钮b)当单击不同的按钮时,将其作为一行处理c)忘记记住的按钮。”“进程”的意思是:将这对按钮添加到一个不断增长的列表中,其中T是一个可以容纳两个按钮(可能是一个元组)的数据结构。也可以在表单上调用Invalidate.-在绘制事件中,您循环该列表,并为每一对从item1 as按钮位置到item2绘制一条线。。请注意,所有按钮都可以且应该使用相同的单击事件,您可以且需要将
sender
param转换为按钮。完成后,请带着更多问题回来;-)是的,我解决了!谢谢你@TaW
yourButtonClass btn = new yourButtonClass()..
..
btn.Click += commonButton_Click;