webForumDet fria alternativet

kordinater på klick på picturebox

.NET

7 svar · 292 visningar · startad av Jymdis

Medlem sedan mars 20016 260 inlägg
Frågan#1

Hej!
Jag undrar om det på nåt sätt går att få ut kordinaten på var ett klick på en picturebox ägt rum?
Eller om nån kan peka på en tutorial om hur man gör ett enkelt ritprogram skulle det vara trevligt också =)

tack på förhand

Medlem sedan juni 20022 599 inlägg
#2

MouseMove, MouseDown och MouseUp får koordinaterna relativt Picture-boxens övre vänstra hörn ifrån Windows.

Här är tex ett "komplett" ritprogram:

Private Sub Form_Load()
    Picture1.AutoRedraw = True
    Picture1.FillStyle = vbSolid
End Sub

Private Sub Picture1_MouseMove(Button As Integer, _
        Shift As Integer, X As Single, Y As Single)
    If Button = vbKeyLButton Then Picture1.Circle (X, Y), 50
End Sub
Medlem sedan mars 20016 260 inlägg
#3

Jag får

'AutoRedraw' is not a member of 'System.Windows.Forms.PictureBox'.

Det är vb.net jag leker med alltså!

Medlem sedan juni 20022 599 inlägg
#4

Ja, isåf så får du koordinater/musknappar via e.X, e.Y och e.Button där e skickas in i dina musevents. Det står lite om skillnaderna här.

Medlem sedan mars 20016 260 inlägg
#5
Public Class Form1
    Inherits System.Windows.Forms.Form

    Dim form As String
    Dim val1x, val1y, val2x, val2y As Integer
    Dim mycolor As Color
    Dim tjocklek As Integer

 
    Public Sub rektangel()

    End Sub
    Public Sub cirkel()

    End Sub
    Public Sub linje()

    End Sub

    Public Sub rita(ByVal kord As Point)
        Dim punkt As Graphics = Picture1.CreateGraphics
        Dim p As Point = New Point(val1x, val1y)
        Dim d As Point = New Point(val1x, val1y)
        Dim pen1 As Pen = New Pen(mycolor, tjocklek)
        punkt.DrawLine(pen1, val1x, val1y, val2x, val2y)

        punkt.DrawLine(pen1, p, d)

    End Sub

' Klippt bort lite 

    Private Sub Picture1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Picture1.Click

        If val1x = 0 And val1y = 0 Then
            val1x = Int(Picture1.MousePosition.X)
            val1y = Int(Picture1.MousePosition.Y)

            StatusBar1.Text = "X: " & val1x & " Y: " & val1y

            rita(Picture1.MousePosition())
        Else
            val2x = Int(Picture1.MousePosition.X)
            val2y = Int(Picture1.MousePosition.Y)
            StatusBar1.Text = ""
            Select Case form
                Case "rektangel"
                    rektangel()
                Case "cirkel"
                    cirkel()
                Case "linje"
                    linje()
            End Select
            val1x = 0
            val1y = 0
            val2x = 0
            val2y = 0

        End If

    End Sub

Är min kod för tillfället, och det fungerar förutom att när man läser in koord "val1x = Int(Picture1.MousePosition.X)" osv så verkar den ta var på skärmen och inte var på pictureboxen man klickat?

Medlem sedan juni 20022 599 inlägg
#6

Nu förstår jag ingenting? MousePosition är en statisk property på Control som mäter relativt skärmen (som du skriver). Du borde inte ens kunna kompilera om du försöker anropa den på en instans.

Kan du inte använda MouseDown istf Click? Då får du ju tillgång till e.X och e.Y som ovan.

Medlem sedan mars 20016 260 inlägg
#7

Jepps, that did the trick =)

Medlem sedan mars 20016 260 inlägg
#8

Nevermind =)

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)