Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    331

    [vb.net] disegnare linea

    Salve sto realizzando un software dove avrei la necesità di far disegnare delle linee... ora io sono riuscito a far disegnare una linea ma quello che vorrei è cliccando una prima volta nella picturebox parte la linea e finisce o a un secondo click o al rilascio del mouse... non so se sono stato chiaro!
    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    331
    sono riuscito a disegnare la linea facendo: al primo click prendo la partenza e al secondo la fine ma quello che vorrei è che dopo il primo click la linea segue il mouse fino al rilascio!

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    per far questo devi redefinire l'evento paint del controllo dove disegni..

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    331
    cioè?

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    se disegni sul form devi definire nell'evento onPaint il disegno grafico della linea.. se è un'altro controllo devi fare l'override del suo metodo Paint

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    331
    io disegno in una picture box utilizzando i metodi del mouse

  7. #7
    Puoi fare qualcosa del genere:
    codice:
    Public Class Form1
    
        Dim x1 As Integer
        Dim y1 As Integer
        Dim x2 As Integer
        Dim y2 As Integer
        Dim nClick As Integer = 0
    
        Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
    
            nClick += 1
            Select Case nClick
                Case 1
                    x1 = e.X
                    y1 = e.Y
                Case 2
                    x2 = e.X
                    y2 = e.Y
            End Select
    
            PictureBox1.Invalidate()
    
        End Sub
    
        Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    
            Dim pbGraphic As Graphics = e.Graphics
    
            Select Case nClick
                Case 1
                    pbGraphic.DrawEllipse(Pens.Blue, x1, y1, 1, 1)
                Case 2
                    pbGraphic.DrawLine(Pens.Blue, x1, y1, x2, y2)
                    nClick = 0
            End Select
    
    
        End Sub
    
    End Class
    E' solo uno spunto da cui partire...

    e Buon Natale

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    331
    ti ringrazio è di sicuro un ottimo inizio ma perchè dopo aver fatto una linea se ne voglio fare un'altra me la cancella?
    grazie e buon natale

  9. #9
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    perchè usi sempre 2 coordinate.. cioè solo una riga tra le 2.. per gestirne di più dovrai usare una lista di coppie di punti..

  10. #10
    Se non hai ancora risolto, prova così:

    codice:
     
    Public Class Form1
    
        Dim linee As New ArrayList
        Dim punto As New PointF
        Dim x2 As Single
        Dim y2 As Single
        Dim nClick As Integer = 0
    
        Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
    
            If e.Button = Windows.Forms.MouseButtons.Left Then
    
                punto.X = e.X
                punto.Y = e.Y
                linee.Add(punto)
                nClick += 1
                PictureBox1.Invalidate()
    
            ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
    
                punto.X = -1
                punto.Y = -1
                linee.Add(punto)
                nClick = 0
    
            End If
    
        End Sub
    
        Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
    
            If nClick > 0 Then
    
                x2 = e.X
                y2 = e.Y
    
                PictureBox1.Invalidate()
    
            End If
    
        End Sub
    
        Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    
            Dim puntoVariabile As New PointF
            Dim ultimopunto As New PointF
            Dim punto1 As New PointF
            Dim punto2 As New PointF
    
            If linee.Count > 0 Then
    
                puntoVariabile.X = x2
                puntoVariabile.Y = y2
                ultimopunto = DirectCast(linee.Item(linee.Count - 1), PointF)
    
                e.Graphics.DrawLine(Pens.Blue, ultimopunto, puntoVariabile)
    
                For i As Integer = 1 To linee.Count - 1
    
                    punto1 = DirectCast(linee.Item(i - 1), PointF)
                    punto2 = DirectCast(linee.Item(i), PointF)
    
                    If punto1.X <> -1 And punto2.X <> -1 Then
    
                        e.Graphics.DrawLine(Pens.Blue, punto1, punto2)
    
                    End If
    
                Next
    
            End If
    
        End Sub
    
    End Class
    con il tasto Sx del mouse disegni i punti
    con il tasto Dx del mouse interrompi la sequenza di linee.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.