Results 1 to 2 of 2

Thread: Draw a connection !!!

  1. #1
    phuongcei is offline VB.NET Forum Newbie
    .NET Framework
    .NET 4.0
    Join Date
    Jun 2012
    Posts
    1
    Reputation
    0

    Question Draw a connection !!!

    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

  2. #2
    Paszt's Avatar
    Paszt is offline VB.NET Forum Moderator
    .NET Framework
    .NET 4.0
    Join Date
    Jun 2004
    Location
    Raleigh, NC - USA
    Posts
    1,502
    Reputation
    308
    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.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Harvest time tracking