Visual Basic 2005 – 如何拖放圖片

摘要: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 程式開發與介面設計秘訣」一書。

章立民研究室 2007/1/15