• 締切済み

PictureBoxのドラッグ&ドロップについて

PictureBox1をドラッグ&ドロップしてPictureBox2に画像を移したいのですが、 どうすればいいのかわかりません。 テキストボックスでの作り方だったらわかるのですが・・・。 教えて下さい。

みんなの回答

回答No.3

'サンプルクラスです。 http://dobon.net/vb/dotnet/graphics/pictureboxdragdrop.html を真似して、少し手を加えました。 最低限の機能なので、必要であれば、そちらで手を加えてくださいね。 'まずはクラスの作成 Public Class MyPicture   Inherits System.Windows.Forms.PictureBox   Private _bmp As Bitmap   'ファイルからの設定   Public Sub 設定(ByVal p_ファイル As String)     Me.設定(New Bitmap(p_ファイル))   End Sub   'Bitmap型からの設定   Public Sub 設定(ByVal p_ビットマップ As Bitmap)     Me.破棄()     _bmp = p_ビットマップ     AddHandler MyBase.Paint, AddressOf Me.on_Paint     AddHandler MyBase.Resize, AddressOf Me.on_Resize     AddHandler MyBase.MouseDown, AddressOf Me.on_MouseDown     Me.Invalidate()   End Sub   '破棄処理   Public Sub 破棄()     If (_bmp Is Nothing) Then       Return     End If     RemoveHandler MyBase.Paint, AddressOf Me.on_Paint     RemoveHandler MyBase.Resize, AddressOf Me.on_Resize     RemoveHandler MyBase.MouseDown, AddressOf Me.on_MouseDown     MyBase.Image = Nothing     _bmp = Nothing   End Sub   '再描画処理:再描画   Private Sub on_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs)     Select Case Me.SizeMode       Case PictureBoxSizeMode.Normal         e.Graphics.DrawImage(_bmp, 0, 0)       Case PictureBoxSizeMode.AutoSize         e.Graphics.DrawImage(_bmp, 0, 0, Me.Width, Me.Height)       Case PictureBoxSizeMode.CenterImage         Dim l_pntf As PointF = 計算(Me.Size, _bmp.Size)         e.Graphics.DrawImage(_bmp, l_pntf.X, l_pntf.Y, _bmp.Width, _bmp.Height)       Case PictureBoxSizeMode.StretchImage         Me.Size = _bmp.Size         e.Graphics.DrawImage(_bmp, 0, 0, Me.Width, Me.Height)     End Select   End Sub   '再描画処理:リサイズ   Private Sub on_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs)     Me.Invalidate()   End Sub   'ドラッグ処理:出:開始   Private Sub on_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)     Dim l_dataObj As New DataObject()     l_dataObj.SetData(DataFormats.Bitmap, _bmp)     'ドラッグを開始する     Me.DoDragDrop(l_dataObj, DragDropEffects.All)   End Sub   'ドラッグ処理:受:ドラッグ中   Protected Overrides Sub OnDragEnter(ByVal drgevent As System.Windows.Forms.DragEventArgs)     If (drgevent.Data.GetDataPresent(DataFormats.Bitmap)) Then       drgevent.Effect = drgevent.AllowedEffect.Copy     Else       drgevent.Effect = drgevent.AllowedEffect.None     End If   End Sub   'ドラッグ処理:受:ドラッグ確定   Protected Overrides Sub OnDragDrop(ByVal drgevent As System.Windows.Forms.DragEventArgs)     If (drgevent.Data.GetDataPresent(DataFormats.Bitmap)) Then       drgevent.Effect = drgevent.AllowedEffect.Copy       Dim l_bmp As Bitmap = CType(drgevent.Data.GetData(DataFormats.Bitmap), Bitmap)       Me.設定(l_bmp)     Else       drgevent.Effect = drgevent.AllowedEffect.None     End If   End Sub   'ドロップ&ドロップを受け入れるプロパティの規定値をTrue   <System.ComponentModel.DefaultValue(True)> _   Public Overrides Property AllowDrop() As Boolean     Get       Return MyBase.AllowDrop     End Get     Set(ByVal Value As Boolean)       MyBase.AllowDrop = Value     End Set   End Property   'SizeMode=CenterImageの時のための、計算ロジック   Private Function 計算(ByVal p_ボックス As Integer, ByVal p_画像 As Integer) As Single     Return (p_ボックス - p_画像) / 2   End Function   Private Function 計算(ByVal p_ボックス As Size, ByVal p_画像 As Size) As PointF     Return New PointF(計算(p_ボックス.Width, p_画像.Width), 計算(p_ボックス.Height, p_画像.Height))   End Function End Class 上記クラスを追加した後、画面にピクチャボックスを二つ作成してください。 その後、コードの一部を修正します。 ------------------------------------------------------------------ ※1.Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox ※2.Me.PictureBox1 = New System.Windows.Forms.PictureBox() ------------------------------------------------------------------ を ------------------------------------------------------------------ ※1.Friend WithEvents PictureBox1 As MyPicture ※2.Me.PictureBox1 = New MyPicture() ------------------------------------------------------------------ PictureBox2も同様に! この手順は別サンプルでも行いました。 http://okwave.jp/kotaeru.php3?q=2049046 あとは、ボタンなどのイベントにコードを追加 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load   Me.PictureBox1.AllowDrop = True   Me.PictureBox2.AllowDrop = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Me.PictureBox1.設定("D:\エロ画像.bmp") End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   Me.PictureBox1.破棄() End Sub

  • Caryo_t
  • ベストアンサー率45% (112/246)
回答No.2

#1です。 コピペミスしました。ごめんなさい。 欄外最上部で以下のようにグローバル函数を宣言をしてください。 Dim PicName As String

  • Caryo_t
  • ベストアンサー率45% (112/246)
回答No.1

VB6だと,次のような感じです。 ピクチャーボックスを2こ用意してください。 コードは以下の通り。 Dim PicName As String Private Sub Form_Load() PicName = "ファイルの名前をフルパスで" '例)C:\Test.jpg With Picture1 .AutoSize = True .Picture = LoadPicture(PicName) .DragMode = 1 End With End Sub Private Sub Picture2_DragDrop(Source As Control, X As Single, Y As Single) Picture2.AutoSize = True Picture2.Picture = Picture1.Picture End Sub 以上です。 希望のものと違う場合,やりたいことと,VBのバージョンを教えてください。

okkomu
質問者

補足

>希望のものと違う場合,やりたいことと,VBのバージョンを教えてください。 忘れていました・・・。 .Net2003を使用しています。

関連するQ&A

専門家に質問してみよう