Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB.NET 2008] OGGETTO DrawEllipse

    Ciao
    sono da poco alle prese con l'oggetto DrwawEllipse e volevo sapere se eiste un modo per attivare un evento quando l'utente clicca sul cerchio creato in una picture box


    qui ho schematizzato il mio codice nell'evento paint per velocizzare le cose ma ho intezione di creare una classe apposita


    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

    Dim G As Graphics = e.Graphics 'Me.CreateGraphics
    Dim P As New Pen(Color.Red, 5)
    P.StartCap = Drawing2D.LineCap.NoAnchor
    P.EndCap = Drawing2D.LineCap.ArrowAnchor
    Dim puntox As Integer = 100
    Dim puntoy As Integer = 100
    Dim rect As New Rectangle(puntox - 5, puntoy - 5, 5, 5)

    G.DrawLine(P, 190, 200, 200, 200)
    G.DrawEllipse(P, rect)
    Note:
    inizialmente avevo immaginato di mettere le coordinate di tutti i cerchi creati con DrawEllipse in un array e all'evento mouse sulla picturebox cercare se le cordinate del mouse coincidevano con quelle del cerchio.
    suggerimenti?


    grazie
    Delfino Cobalto

  2. #2
    puoi risolvere in questo modo:
    codice:
    Public Class Form1
    
        Dim myPath As New Drawing2D.GraphicsPath
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            myPath.StartFigure()
            myPath.AddEllipse(20, 30, 50, 35)
            myPath.CloseFigure()
        End Sub
    
        Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
            If myPath.IsVisible(PictureBox1.PointToClient(MousePosition)) Then MessageBox.Show("Click")
        End Sub
    
        Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
            e.Graphics.DrawEllipse(Pens.Blue, 20, 30, 50, 35)
        End Sub
    
    End Class

  3. #3
    Grazie per l'idea ma se ho N punti (nel mio caso non posso quantizzarli perchè derivano da eventi di oggetti mobili)


    Ho provato a aggiunere un secondo oggetto al tuo codice
    myPath.StartFigure()
    myPath.AddEllipse(20, 30, 50, 35)
    myPath.AddEllipse(50, 50, 50, 35)
    myPath.CloseFigure()
    ma come faccio a capire poi su quale AddEllipse ho cliccato?

    Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
    If myPath.IsVisible(PictureBox1.PointToClient(MousePo sition)) Then MessageBox.Show("Click")
    End Sub
    grazie
    Delfino Cobalto

  4. #4
    Definisci le figure che hai sulla picturebox come myPath1, myPath2... e nell'evento PictureBox1.MouseClick fai riferimento ad esse in questo modo:

    If myPath1.IsVisible(PictureBox1.PointToClient(MouseP osition)) Then ...'Ho cliccato sulla figura 1
    If myPath2.IsVisible(PictureBox1.PointToClient(MouseP osition)) Then ...'Ho cliccato sulla figura 2

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.