Click to See Complete Forum and Search --> : Drag and Drop on a Form
bleyke
September 15th, 2005, 04:24 AM
Hi,
I have a litlle problem and I hope someone can help me.
Ik have a form with textbox'es on it. Now I want write something so it's possible for the user to move the textboxes on the form and to shrink them or make them larger
I don't know how to start with this.
Greetz Bleyke
Drag and drop i have found already, but resize not
jhammer
September 15th, 2005, 07:27 AM
How to drag the textBox on the form:
Drag a textBox to the form (textBox1) And add the code to the form:
Private _mouseDown As Boolean = False
Private _initialMouseX As Integer
Private _initialMouseY As Integer
Private Sub textBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles textBox1.MouseDown
_mouseDown = True;
_initialMouseX = e.X;
_initialMouseY = e.Y;
End Sub
Private Sub textBox1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles textBox1.MouseUp
_mouseDown = False;
End Sub
Private Sub textBox1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles textBox1.MouseMove
If ( Not _mouseDown) Then Return
Dim deltaX As Integer = e.X - _initialMouseX
Dim deltaY As Integer = e.Y - _initialMouseY
textBox1.Left += deltaX
textBox1.Top += deltaY
End Sub
I think that resize is a little more complicated, but it is done in a similar way.
jhammer
September 15th, 2005, 09:31 AM
I have the solution for the resize. Originally I wrote it on c#, so I am sorry for any mistakes in the translation to VB
Private _mouseDown As Boolean = False
Private _initialMouseX As Integer
Private _initialMouseY As Integer
Private _initialWidth As Integer
Private Enum Borders
Left
Right
None
End Enum
Private _resizeType As Borders = Borders.None
Private Sub textBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles textBox1.MouseDown
_mouseDown = true
_resizeType = GetBorder(e.X, e.Y)
_initialMouseX = e.X
_initialMouseY = e.Y
_initialWidth = textBox1.Width
End Sub
Private Function GetBorder(int x, int y) As Borders
If (x<5 And x>-5) Then Return Borders.Left
If (x>textBox1.Width-10 And x<textBox1.Width+10) Then Return Borders.Right
Return Borders.None
End Function
Private Sub textBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles textBox1.MouseUp
_mouseDown = false
Me.Cursor = Cursors.Arrow
_resizeType = Borders.None
End Sub
Private Sub textBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles textBox1.MouseMove
If (Not _mouseDown) Then
If (GetBorder(e.X, e.Y) <> Borders.None) Then
Me.Cursor = Cursors.SizeWE
Else
Me.Cursor = Cursors.Arrow
End If
Return
End If
If (_resizeType = Borders.None)
Dim deltaX As Integer = e.X - _initialMouseX
Dim deltaY As Integer = e.Y - _initialMouseY
textBox1.Left += deltaX
textBox1.Top += deltaY
Else
Dim deltaX As Integer = e.X - _initialMouseX
Select Case _resizeType
Case Borders.Left:
If (textBox1.Width - deltaX>0) Then
textBox1.Left += deltaX
textBox1.Width -= deltaX
End If
Case Borders.Right:
If (_initialWidth + deltaX>0) Then _
textBox1.Width = _initialWidth + deltaX
End Select
End If
End Sub
Private Sub textBox1_MouseLeave(sender As Object, e As EventArgs) Handles textBox1.MouseLeave
Me.Cursor = Cursors.Arrow;
End Sub
I only implemented resizing to left and right because this is a textbox, and resizing to up and down is obsolete. You can go ahead and implement it yourself (should be easy)
codeguru.com
Copyright Internet.com Inc., All Rights Reserved.