摘要:Visual Basic 2005 – 如何拖放圖片
我們撰寫了一個程式來示範如何在兩個 PictureBox 控制項間拖曳圖片,其功能特性如下所示:
q 如圖表 1 所示,您可以使用拖放方式將左側 PictureBox 控制項中的圖片移動至右側的 PictureBox 控制項中,反之亦然,亦即左右兩個 PictureBox 控制項都可以作為拖放來源與置放目標。
圖表 1
q 值得一提的是,如果您持續按著 CTRL 鍵,則可以使用拖放方式將左側 PictureBox 控制項中的圖片複製到右側的 PictureBox 控制項中(如圖表2所示),反之亦然,亦即左右兩個 PictureBox 控制項都可以作為拖放來源與置放目標。
圖表 2
程式範例在拖放操作方面的程式碼如下所列:
' 宣告一個常數以便偵測在拖曳期間CTRL鍵是否被按下。
Const CtrlMask As Byte = 8
Private Sub MyDemoForm_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
picLeft.AllowDrop = True
picRight.AllowDrop = True
End Sub
Private Sub PictureBox_MouseDown(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles picLeft.MouseDown, picRight.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim pic As PictureBox = CType(sender, PictureBox)
' 啟始拖放操作。
If pic.Image IsNot Nothing Then
pic.DoDragDrop(pic.Image, _
DragDropEffects.Move Or DragDropEffects.Copy)
End If
End If
End Sub
Private Sub PictureBox_DragEnter(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles picLeft.DragEnter, picRight.DragEnter
If (e.Data.GetDataPresent(DataFormats.Bitmap)) Then
If (e.KeyState And CtrlMask) = CtrlMask Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.Move
End If
Else
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub PictureBox_DragDrop(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles picLeft.DragDrop, picRight.DragDrop
Dim pic As PictureBox = CType(sender, PictureBox)
pic.Image = _
CType(e.Data.GetData(DataFormats.Bitmap), Bitmap)
If (e.KeyState And CtrlMask) <> CtrlMask Then
If pic.Name = "picLeft" Then
picRight.Image = Nothing
Else
picLeft.Image = Nothing
End If
End If
End Sub
前面這兩個關於文字與圖片的拖放操作範例都是在同一個表單上的兩個控制項間進行,其實它們亦可在同一個應用程式內之不同表單上的控制項間拖放。當然,您也可以拖放文字甚至檔案,相關說明請參閱「Visual Basic 2005 程式開發與介面設計秘訣」一書,VC# 的用戶請參閱「Visual C# 2005 程式開發與介面設計秘訣」一書。
章立民研究室