天天看点

绘制控件间的连接线

代码来自 网友 loadres

界面预览:

绘制控件间的连接线

程序源码:

绘制控件间的连接线

Imports  System.Drawing

绘制控件间的连接线

Imports  System.Drawing.Drawing2D

绘制控件间的连接线
绘制控件间的连接线
绘制控件间的连接线

Public   Class Form1 Class Form1

绘制控件间的连接线
绘制控件间的连接线
绘制控件间的连接线

    Public Shared Function CreateGraphicsPathByControls()Function CreateGraphicsPathByControls(ByVal SourceControl As Control, ByVal TargetControl As Control) As Drawing2D.GraphicsPath

绘制控件间的连接线

        Dim iGraphicsPath As New Drawing2D.GraphicsPath

绘制控件间的连接线
绘制控件间的连接线

        Dim iSP As Point

绘制控件间的连接线

        Dim iEP As Point

绘制控件间的连接线
绘制控件间的连接线

        If (TargetControl.Left + TargetControl.Width) < SourceControl.Left Then

绘制控件间的连接线

            '左边

绘制控件间的连接线

            If (TargetControl.Top + TargetControl.Height) < SourceControl.Top Then

绘制控件间的连接线

                '左上角

绘制控件间的连接线

                '|_

绘制控件间的连接线

                '

绘制控件间的连接线

                iSP.X = SourceControl.Left

绘制控件间的连接线

                iSP.Y = SourceControl.Top + SourceControl.Height  4

绘制控件间的连接线

                iEP.X = TargetControl.Left + TargetControl.Width * 3  4

绘制控件间的连接线

                iEP.Y = TargetControl.Top + TargetControl.Height

绘制控件间的连接线
绘制控件间的连接线

                iGraphicsPath.AddLine(iSP.X, iSP.Y, iEP.X, iSP.Y)

绘制控件间的连接线

                iGraphicsPath.AddLine(iEP.X, iSP.Y, iEP.X, iEP.Y)

绘制控件间的连接线
绘制控件间的连接线

            ElseIf TargetControl.Top > (SourceControl.Top + SourceControl.Height) Then

绘制控件间的连接线

                '左下角

绘制控件间的连接线

                ' _

绘制控件间的连接线

                '|

绘制控件间的连接线
绘制控件间的连接线

                iSP.X = SourceControl.Left

绘制控件间的连接线

                iSP.Y = SourceControl.Top + SourceControl.Height * 3  4

绘制控件间的连接线

                iEP.X = TargetControl.Left + TargetControl.Width * 3  4

绘制控件间的连接线

                iEP.Y = TargetControl.Top

绘制控件间的连接线
绘制控件间的连接线

                iGraphicsPath.AddLine(iSP.X, iSP.Y, iEP.X, iSP.Y)

绘制控件间的连接线

                iGraphicsPath.AddLine(iEP.X, iSP.Y, iEP.X, iEP.Y)

绘制控件间的连接线

            Else

绘制控件间的连接线

                '左边

绘制控件间的连接线

                '_

绘制控件间的连接线

                '

绘制控件间的连接线

                iSP.X = SourceControl.Left

绘制控件间的连接线

                iSP.Y = SourceControl.Top + SourceControl.Height  2

绘制控件间的连接线

                iEP.X = TargetControl.Left + TargetControl.Width

绘制控件间的连接线

                iEP.Y = TargetControl.Top + TargetControl.Height  2

绘制控件间的连接线
绘制控件间的连接线

                iGraphicsPath.AddLine(iSP.X, iSP.Y, iEP.X + (iSP.X - iEP.X)  2, iSP.Y)

绘制控件间的连接线

                iGraphicsPath.AddLine(iEP.X + (iSP.X - iEP.X)  2, iEP.Y, iEP.X, iEP.Y)

绘制控件间的连接线

            End If

绘制控件间的连接线

        ElseIf TargetControl.Left > (SourceControl.Left + TargetControl.Width) Then

绘制控件间的连接线

            '右边

绘制控件间的连接线

            If (TargetControl.Top + TargetControl.Height) < SourceControl.Top Then

绘制控件间的连接线

                '右上角

绘制控件间的连接线

                '_|

绘制控件间的连接线

                '

绘制控件间的连接线

                iSP.X = SourceControl.Left + SourceControl.Width

绘制控件间的连接线

                iSP.Y = SourceControl.Top + SourceControl.Height  4

绘制控件间的连接线

                iEP.X = TargetControl.Left + TargetControl.Width  4

绘制控件间的连接线

                iEP.Y = TargetControl.Top + TargetControl.Height

绘制控件间的连接线
绘制控件间的连接线

                iGraphicsPath.AddLine(iSP.X, iSP.Y, iEP.X, iSP.Y)

绘制控件间的连接线

                iGraphicsPath.AddLine(iEP.X, iSP.Y, iEP.X, iEP.Y)

绘制控件间的连接线
绘制控件间的连接线

            ElseIf TargetControl.Top > (SourceControl.Top + SourceControl.Height) Then

绘制控件间的连接线

                '右下角

绘制控件间的连接线

                '_

绘制控件间的连接线

                ' |

绘制控件间的连接线

                iSP.X = SourceControl.Left + SourceControl.Width

绘制控件间的连接线

                iSP.Y = SourceControl.Top + SourceControl.Height * 3  4

绘制控件间的连接线

                iEP.X = TargetControl.Left + TargetControl.Width  4

绘制控件间的连接线

                iEP.Y = TargetControl.Top

绘制控件间的连接线
绘制控件间的连接线

                iGraphicsPath.AddLine(iSP.X, iSP.Y, iEP.X, iSP.Y)

绘制控件间的连接线

                iGraphicsPath.AddLine(iEP.X, iSP.Y, iEP.X, iEP.Y)

绘制控件间的连接线
绘制控件间的连接线

            Else

绘制控件间的连接线

                '右边

绘制控件间的连接线

                '_

绘制控件间的连接线

                '

绘制控件间的连接线

                iSP.X = SourceControl.Left + SourceControl.Width

绘制控件间的连接线

                iSP.Y = SourceControl.Top + SourceControl.Height  2

绘制控件间的连接线

                iEP.X = TargetControl.Left

绘制控件间的连接线

                iEP.Y = TargetControl.Top + TargetControl.Height  2

绘制控件间的连接线
绘制控件间的连接线

                iGraphicsPath.AddLine(iSP.X, iSP.Y, iEP.X + (iSP.X - iEP.X)  2, iSP.Y)

绘制控件间的连接线

                iGraphicsPath.AddLine(iEP.X + (iSP.X - iEP.X)  2, iEP.Y, iEP.X, iEP.Y)

绘制控件间的连接线
绘制控件间的连接线

            End If

绘制控件间的连接线

        Else

绘制控件间的连接线

            If (TargetControl.Top + TargetControl.Height) < SourceControl.Top Then

绘制控件间的连接线

                '上边

绘制控件间的连接线

                '|

绘制控件间的连接线

                '

绘制控件间的连接线

                iSP.X = SourceControl.Left + SourceControl.Width  2

绘制控件间的连接线

                iSP.Y = SourceControl.Top

绘制控件间的连接线

                iEP.X = TargetControl.Left + TargetControl.Width  2

绘制控件间的连接线

                iEP.Y = TargetControl.Top + TargetControl.Height

绘制控件间的连接线
绘制控件间的连接线

                iGraphicsPath.AddLine(iSP.X, iSP.Y, iSP.X, iSP.Y - (iSP.Y - iEP.Y)  2)

绘制控件间的连接线

                iGraphicsPath.AddLine(iEP.X, iSP.Y - (iSP.Y - iEP.Y)  2, iEP.X, iEP.Y)

绘制控件间的连接线
绘制控件间的连接线

            ElseIf TargetControl.Top > (SourceControl.Top + SourceControl.Height) Then

绘制控件间的连接线

                '下边

绘制控件间的连接线

                '|

绘制控件间的连接线

                iSP.X = SourceControl.Left + SourceControl.Width  2

绘制控件间的连接线

                iSP.Y = SourceControl.Top + SourceControl.Height

绘制控件间的连接线

                iEP.X = TargetControl.Left + TargetControl.Width  2

绘制控件间的连接线

                iEP.Y = TargetControl.Top

绘制控件间的连接线
绘制控件间的连接线

                iGraphicsPath.AddLine(iSP.X, iSP.Y, iSP.X, iSP.Y - (iSP.Y - iEP.Y)  2)

绘制控件间的连接线

                iGraphicsPath.AddLine(iEP.X, iSP.Y - (iSP.Y - iEP.Y)  2, iEP.X, iEP.Y)

绘制控件间的连接线

            Else

绘制控件间的连接线

                '重合

绘制控件间的连接线

                '什么都不做

绘制控件间的连接线

            End If

绘制控件间的连接线

        End If

绘制控件间的连接线
绘制控件间的连接线

        Return iGraphicsPath

绘制控件间的连接线

    End Function

绘制控件间的连接线
绘制控件间的连接线
绘制控件间的连接线
绘制控件间的连接线

    Private Sub Button1_Click()Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

绘制控件间的连接线

        Dim iG As Graphics = Me.CreateGraphics

绘制控件间的连接线

        Dim iGP As Drawing2D.GraphicsPath

绘制控件间的连接线

        Dim iSPen As New Pen(Color.Blue, 3)

绘制控件间的连接线
绘制控件间的连接线

        iSPen.StartCap = LineCap.RoundAnchor

绘制控件间的连接线

        iSPen.EndCap = LineCap.ArrowAnchor

绘制控件间的连接线
绘制控件间的连接线

        iGP = CreateGraphicsPathByControls(ListBox1, ListBox2)

绘制控件间的连接线

        iG.DrawPath(iSPen, iGP)

绘制控件间的连接线

    End Sub

绘制控件间的连接线

End Class

绘制控件间的连接线

继续阅读