Drag and Drop Text
Here's an example application that implements drag and drop. Using Visual Studio 2005, create a new Windows Forms application and name it
DragAndDrop. Coding drag and drop operations differs slightly for some controls and for varying data types. This section shows you how to drag and drop some text into a TextBox control.
Populate the default Form1 with a TextBox control (see
Figure 2), and set these two TextBox properties as follows:
Multiline-True
BorderStyle-Fixed3D
Switch to the code view for Form1 and declare the following constant:
Public Class Form1
Const CtrlMask As Byte = 8
In the
Form1_Load event, set the TextBox's
AllowDrop property to
True:
Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
'---set the control to allow drop---
TextBox1.AllowDrop = True
End Sub
Next, you service the
DragEnter event. As mentioned earlier, the control fires this event when you drag something into the control. Here, you will determine if the operation is copy or move, (depending on whether the user is holding down the Ctrl key) and then set the mouse pointer accordingly. To check for this special keystroke, you
AND the
KeyState property with a CtrlMask (defined as a byte with a value of
8). In addition, change the border style of the TextBox control to
FixedSingle so that it serves as a visual cue to the user. Here's the code:
Private Sub TextBox1_DragEnter( _
ByVal sender As Object, _
ByVal e As _
System.Windows.Forms.DragEventArgs) _
Handles TextBox1.DragEnter
'---if the data to be dropped is a text format---
If (e.Data.GetDataPresent(DataFormats.Text)) Then
'---determine if this is a copy or move---
If (e.KeyState And CtrlMask) = CtrlMask Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.Move
End If
'---change the border style of the control---
TextBox1.BorderStyle = BorderStyle.FixedSingle
End If
End Sub
When a user drops the dragged text, you handle the
DragDrop event:
Private Sub TextBox1_DragDrop( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles TextBox1.DragDrop
'---if the data to be dropped is a text format---
If (e.Data.GetDataPresent(DataFormats.Text)) Then
'---set the control to display
' the text being dropped---
TextBox1.Text = e.Data.GetData( _
DataFormats.Text)
End If
'---set the borderstyle back to its original---
TextBox1.BorderStyle = BorderStyle.Fixed3D
End Sub
You can now press F5 to test the application.
Figure 3 shows the mouse pointer when a user performs a move (top of the figure) and a copy (bottom of the figure) operation on the TextBox control. To perform a copy operation, simply hold the CTRL key when dragging your mouse.
Figure 4 shows the pointer when a user drags an object over a control that does not (bottom of the figure) accept a drop.
With the ability to drag and drop text under your belt, you can move on to dragging and dropping images to and from PictureBox controls.