Solved

How can I make text so that I can drag it with the mouse at run time and place it on different parts of a picture box

Posted on 2009-06-29
5
233 Views
Last Modified: 2012-05-07
How can I drag text on to a picture box so that the user can label different parts of the picture without typing vb.net 2008 express
0
Comment
Question by:Dov_B
  • 2
  • 2
5 Comments
 
LVL 9

Expert Comment

by:Deathrace
Comment Utility
Hi,
You said text, which control label or textbox you are using. Right now i can suggest one link as per my understanding. Check the below one.
http://www.codeproject.com/KB/cpp/vbnetdragdrop.aspx
0
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
Comment Utility
Instead of drawing the text in the Paint() event, we could create actual Label controls and add them to the PictureBox:
Public Class Form1
 

    Public Const HTCAPTION As Integer = &H2

    Public Const WM_NCLBUTTONDOWN As Integer = &HA1
 

    Public Declare Auto Function ReleaseCapture Lib "user32.dll" () As Integer

    Public Declare Ansi Function DragControl Lib "user32.dll" Alias "SendMessageA" (ByVal handle As IntPtr, Optional ByVal Message As Integer = WM_NCLBUTTONDOWN, Optional ByVal HitTest As Integer = HTCAPTION, Optional ByVal wParam As Integer = 0) As Integer
 

    Private startPt As Point
 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        NewLabel("Some Thing", New Point(25, 100))

        NewLabel("Another Thing", New Point(150, 100))

        NewLabel("Thing One", New Point(250, 300))

    End Sub
 

    Private Sub NewLabel(ByVal txt As String, ByVal location As Point)

        Dim lbl As New Label

        lbl.Text = txt

        lbl.Location = location

        lbl.BackColor = Color.Transparent

        AddHandler lbl.MouseDown, AddressOf lbl_MouseDown

        AddHandler lbl.MouseMove, AddressOf lbl_MouseMove

        Me.Controls.Add(lbl)

        lbl.Parent = PictureBox1

        lbl.BringToFront()

    End Sub
 

    Private Sub lbl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

        If e.Button = Windows.Forms.MouseButtons.Left Then

            startPt = New Point(e.X, e.Y)

        End If

    End Sub
 

    Private Sub lbl_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

        If e.Button = Windows.Forms.MouseButtons.Left Then

            Dim lbl As Label = CType(sender, Label)

            lbl.Location = New Point(lbl.Location.X + (e.X - startPt.X), lbl.Location.Y + (e.Y - startPt.Y))

        End If

    End Sub
 

End Class

Open in new window

0
 

Author Comment

by:Dov_B
Comment Utility
extremely cool
say before I code the project I dont know how many labels I will need is there a way of dynamicly adding these labels at run time?
also is there a way I can do the same dragging of the labels around the picture box
but drag around smaller pictures I asked this question here
http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_24530191.html#a24737976
someone sent me links but I am having a heck of a time figuring out how to follow those projects is there a way of doing it the same way as the tex
0
 
LVL 85

Assisted Solution

by:Mike Tomlinson
Mike Tomlinson earned 500 total points
Comment Utility
"...is there a way of dynamicly adding these labels at run time?"

Yes...I already took that into account.  Just call NewLabel() whenever you want a new label...

"...is there a way I can do the same dragging of the labels around the picture box...but drag around smaller pictures..."

Yes...you can do the exact same thing I did with Labels but with PictureBoxes.  Just create them at run-time as I did and wire up the MouseDown()/MouseMove() events.

Study the NewLabel() method to see what I'm doing in there...   =)
0
 

Author Closing Comment

by:Dov_B
Comment Utility
woah!!! you did it again !! Thankyou! I have a couple of related questions if you get a chance
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Article by: Kraeven
Introduction Remote Share is a simple remote sharing tool, enabling you to see, add and remove remote or local shares. The application is written in VB.NET targeting the .NET framework 2.0. The source code and the compiled programs have been in…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now