Jak obiecałem, zrobiłem łączenie elementów liniami na dwa sposoby.
Oto eventy:
private int poz = 0;
private Point p1 = new Point();
private Point p2 = new Point();
private void MouseDoubleClick1(Object sender, MouseEventArgs e)
{
poz = poz + 1;
//Graphics grx = panel1.CreateGraphics();
if (poz == 1)
{
p1 = new Point(m_lastLocation1.X, m_lastLocation1.Y);
}
if (poz == 2)
{
p2 = new Point(m_lastLocation1.X, m_lastLocation1.Y);
poz = 0;
//sposób pierwszy
//Pen d = new Pen(Color.Red, 2);
//d.DashStyle = DashStyle.Dot; //linia przerywana
//grx.DrawLine(d, p1, p2);
//sposób drugi bardziej elegancki :)
ShapeContainer canvas = new ShapeContainer();
LineShape theLine = new LineShape();
canvas.Parent = panel1;
theLine.Parent = canvas;
theLine.StartPoint = p1;
theLine.EndPoint = p2;
}
}
private void MouseDoubleClick2(Object sender, MouseEventArgs e)
{
poz = poz + 1;
//Graphics grx = panel1.CreateGraphics();
if (poz == 1)
{
p1 = new Point(m_lastLocation2.X, m_lastLocation2.Y);
}
if (poz == 2)
{
p2 = new Point(m_lastLocation2.X, m_lastLocation2.Y);
poz = 0;
//sposób pierwszy
//Pen d = new Pen(Color.Red, 2);
//d.DashStyle = DashStyle.Dot; //linia przerywana
//grx.DrawLine(d, p1, p2);
//sposób drugi bardziej elegancki :)
ShapeContainer canvas = new ShapeContainer();
LineShape theLine = new LineShape();
canvas.Parent = panel1;
theLine.Parent = canvas;
theLine.StartPoint = p1;
theLine.EndPoint = p2;
}
}
Zastanawiam się jak rozwiązać temat przenoszenia kontrolek razem z połączeniami linii? Czyli połączyłem linią koło z kwadratem i przesuwam kwadrat lub koło w inne miejsce zachowując połączenie między nimi.
Mam wizję ;) jak to zrobić tylko nie wiem czy to dobre rozwiązanie. Wymyśliłem, że użyję Timer-a i tablicy w której będą pamiętane połączenia. W czasie przesuwania obiektu połączenia p1 i p2 będą korygowane.
Oczywiście chętnie wysłucham innych propozycji albo nawet gotowego rozwiązania. :)