Question Draw a connection !!!

phuongcei

New member
Joined
Jun 1, 2012
Messages
1
Programming Experience
1-3
Hi forum!

I have a problem with my project. (attached file).
When I click on the "computer", I get a computer on the screen. Suppose on the screen, i have 2 computers. (they can be moved)

Now I want that:

1. When I click on the "Connection" button and choose the 2 computers, the connection is drawing. If still want to draw a connection, I have to click on the "Connection", choose the 2 computers again.

2. When I move the computer's location, "connection" will not be lost.

Thanks for reading.

And so sorry for my bad english.

https://www.box.com/s/13024643f9e569ccc28c
 
I downloaded the project and here is the only really relevant code:
#Region "IMPORTS"
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.Net
Imports System.IO
#End Region

Public Module Module1
    Public icom As Integer = 1
End Module

Public Class Form1
    Dim butcom(20) As Button
    Dim vtricom(20) As Point
  
    '==========================================================
#Region "BUTTONS"

    Private Sub выход_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        End
    End Sub

#End Region

    '============================================================

#Region "MOVE GROUP(i)"

    '========== DI CHUYEN Group(i)========== MOT KIEU HAM
    Private dragging As Boolean
    Private beginX, beginY As Integer

    Private Sub Control_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        dragging = True
        beginX = e.X
        beginY = e.Y
    End Sub

    Private Sub Control_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim DraggedControl As Control = DirectCast(sender, Control)
        If dragging = True Then
            DraggedControl.Location = New Point(DraggedControl.Location.X +
            e.X - beginX, DraggedControl.Location.Y +
            e.Y - beginY)
            Me.Refresh()
        End If
    End Sub

    Private Sub Control_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        dragging = False
    End Sub

    Private Sub Control_layvitri(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim vtriControl As New Point
        vtriControl = e.Location
    End Sub

#End Region
    '=========HET phan di chuyen group(i) ==============

#Region " TAO GROUP"

    ' "GROUP COMPUTER"
    Private Sub computer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles computer.Click
        butcom(icom) = New Button
        With butcom(icom)
            .Name = "computer " & icom
            .Location = New Point(376, 178)
            .Width = 55
            .Height = 55
            .BackColor = Color.Green
            .Image = Image.FromFile(Application.StartupPath & "\data\PC.png")
        End With
        Me.Controls.Add(butcom(icom))
        butcom(icom).BringToFront()
        ToolTip1.SetToolTip(butcom(icom), "Computer " & icom)
        AddHandler butcom(icom).MouseDown, AddressOf Me.Control_MouseDown
        AddHandler butcom(icom).MouseDown, AddressOf Me.Control_layvitri
        AddHandler butcom(icom).MouseMove, AddressOf Me.Control_MouseMove
        AddHandler butcom(icom).MouseUp, AddressOf Me.Control_MouseUp
        icom = icom + 1
    End Sub
    '================= HET GROUP COMPUTER====================
#End Region
   
End Class

I am also curious if anyone has an elegant solution. I have started a similar project but opted for the GDI+ approach; I created a user control that keeps a collection of objects (computers in your case). The user control intercepts its parent's paint event and paints the objects stored in the collection. I am looking in to implementing an A* (pronounced A-Star) path finding algorithm to enable "connections" to be redrawn when the objects are moved by the user after a connection has been made.

One thing to note is that if you want to continue using dynamically created controls as you are, you should probably make the picturebox a panel and add the "computer" objects to the panel's control collection instead of the form's.
 
Back
Top