如何 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;
这总是在左上角画线。使用中间位置或边缘上的智能位置,如果留给您的话,它离另一个按钮最近。在后一种情况下,如果需要,您还可以在笔上添加开始和结束。
我的表单中有一个 "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;
这总是在左上角画线。使用中间位置或边缘上的智能位置,如果留给您的话,它离另一个按钮最近。在后一种情况下,如果需要,您还可以在笔上添加开始和结束。