Ciao a tutti
Devo collegare due panels tra di loro con una RubberBand Line: [panel1]_____[panel2]
a) click su un button di panel1--> Fisso punto di origine. Muovendo il mouse vedo la rubber band disegnarsi
b) click su un button panel2 --> Fisso punto di destinazione
1) I panels sono movibili per cui quando vengono riposizionati la RubberBand Line deve "adeguarsi".
2) La RubberBand deve poter essere cancellata per eliminare il collegamento.
Per semplificazione la linea verrà sempre disegnata solo sul form ospitante.
Ho trovato questo codice di partenza che pero ha la pecca di costringere l'utente ad avere il pulsante sx del mouse sempre premuto.
Non avendo esperienza di grafica vi chiedo di supportarmi nello sviluppo. Grazie
------------------------------------------------------------------------------------------------------
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
'Esclude l'utilizzo del bottone destro del mouse
If e.Button <> MouseButtons.Left Then Exit Sub
'Indica che ho fissato il punto di inizio
m_Inizio_Disegno_Linea = True
'Salva le coordinate correnti
m_Punto_Iniziale = Control.MousePosition
m_Punto_Mobile = m_Punto_Iniziale
End Sub
------------------------------------------------------------------------------------------------------
' Continue drawing the reversible line.
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
' Esce se non ho fissato il punto di inizio
If Not m_Inizio_Disegno_Linea Then Exit Sub
' Cancella la linea precedente
ControlPaint.DrawReversibleLine(m_Punto_Iniziale, m_Punto_Mobile, Me.BackColor)
' salvo la posizione attuale
m_Punto_Mobile = Control.MousePosition
' Disegno la nuova linea Reversibile
ControlPaint.DrawReversibleLine(m_Punto_Iniziale, m_Punto_Mobile, Me.BackColor)
End Sub
------------------------------------------------------------------------------------------------------
' Finish drawing the new line.
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
' Do nothing if we're not drawing.
If Not m_Inizio_Disegno_Linea Then Exit Sub
'm_Inizio_Disegno_Linea = False
' Disegna la linea PERMANENTE nel buffer
' I punti usati in DrawReversibleLine sono coordinate dello schermo
' Per convertirli in coordinate del form uso il metodo PointToClient
m_BufferGraphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
m_BufferGraphics.DrawLine(Pens.Blue, Me.PointToClient(m_Punto_Iniziale), Me.PointToClient(m_Punto_Mobile))
' Ridisegno per mostrare la nuova linea
DrawForm(Me.CreateGraphics())
End Sub
------------------------------------------------------------------------------------------------------
' Redraw the saved buffer.
Private Sub DrawForm(ByVal gr As Graphics)
If Not (m_BufferBitmap Is Nothing) Then gr.DrawImage(m_BufferBitmap, 0, 0)
End Sub
------------------------------------------------------------------------------------------------------
' Redraw the form.
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
DrawForm(e.Graphics)
End Sub
------------------------------------------------------------------------------------------------------