講述VB.NET實(shí)現(xiàn)拖動(dòng)圖片
學(xué)習(xí)VB.NET時(shí),你可能會(huì)遇到VB.NET實(shí)現(xiàn)拖動(dòng)圖片問(wèn)題,這里將介紹VB.NET實(shí)現(xiàn)拖動(dòng)圖片問(wèn)題的解決方法,在這里拿出來(lái)和大家分享一下。盡管VB.NET實(shí)現(xiàn)拖動(dòng)圖片并不像拖放文本那樣經(jīng)常用到,然而它在許多應(yīng)用程序中仍然是很有用的。實(shí)際上這兩者之間也沒(méi)有什么不同,只不過(guò)是數(shù)據(jù)類型發(fā)生了變化而已。
1、 在Form中添加兩個(gè)PictureBox控件。
2、 在代碼窗體中添加如下代碼
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
- System.EventArgs) Handles MyBase.Load
- ' Enable dropping.
- PictureBox2.AllowDrop = True
- End Sub
- Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As _
- System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
- If Not PictureBox1.Image Is Nothing Then
- ' Set a flag to show that the mouse is down.
- m_MouseIsDown = True
- End If
- End Sub
- Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As _
- System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
- If m_MouseIsDown Then
- ' Initiate dragging and allow either copy or move.
- PictureBox1.DoDragDrop(PictureBox1.Image, DragDropEffects.Copy Or _
- DragDropEffects.Move)
- End If
- m_MouseIsDown = False
- End Sub
- Private Sub PictureBox2_DragEnter(ByVal sender As Object, ByVal e As _
- System.Windows.Forms.DragEventArgs) Handles PictureBox2.DragEnter
- If e.Data.GetDataPresent(DataFormats.Bitmap) Then
- ' Check for the CTRL key.
- If e.KeyState = 9 Then
- e.Effect = DragDropEffects.Copy
- Else
- e.Effect = DragDropEffects.Move
- End If
- Else
- e.Effect = DragDropEffects.None
- End If
- End Sub
- Private Sub PictureBox2_DragDrop(ByVal sender As Object, ByVal e As _
- System.Windows.Forms.DragEventArgs) Handles PictureBox2.DragDrop
- ' Assign the image to the PictureBox.
- PictureBox2.Image = e.Data.GetData(DataFormats.Bitmap)
- ' If the CTRL key is not pressed, delete the source picture.
- If Not e.KeyState = 8 Then
- PictureBox1.Image = Nothing
- End If
- End Sub
注意到上面的例子中第二個(gè)PictureBox控件的AllowDrop屬性是在Form1_load事件中設(shè)置的,這是因?yàn)樵O(shè)計(jì)時(shí)PictureBox并沒(méi)有AllowDrop屬性。在MouseDown事件中,代碼首先檢測(cè)是否有要賦給PictureBox的圖片;如果沒(méi)有的話,當(dāng)你移動(dòng)圖片后,接下來(lái)的click將引發(fā)一個(gè)意外。還應(yīng)該注意到的是在DragEnter和DragDrop事件中代碼檢測(cè)CTRL鍵是否被按下,從而決定是否是復(fù)制還是VB.NET實(shí)現(xiàn)拖動(dòng)圖片。
為什么值會(huì)不同呢?在 DragEnter事件中,當(dāng)鼠標(biāo)左鍵按下時(shí),產(chǎn)生的值是1,在加上CTRL的值8,從而值為9。見(jiàn)KeyState枚舉列表DragEventArgs.KeyState Property到目前為止,這兩個(gè)例子處理的都是同一窗體不同控件間的拖放,然而在同一應(yīng)用程序的不同窗體上同樣適用。
【編輯推薦】