- ベストアンサー
VB2010でpanelを移動させて図形を作成、他のフォームで読み込む方法
- VB2010でpanelを移動させて図形を作成する方法について説明します。
- 作成した図形を画像として取り込み、他のフォームで読み込ませる方法も解説します。
- 具体的なコード例を示しながら、画像のような図形を作成して他のフォームで読み込む手順を説明します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんいちは >図形を画像?(bitmap等)として取り込み、他のフォームで読み込ませたいと考えております。 単純にForm2に描画することでいいでしょうか? 上記の仮定でサンプルを作成しました。 Form1にButtonを1個、Form2に PictureBoxを貼り付けました。 Class Form1側 Public Class Form1 Dim capt As New btmap 'Class btmapのインスタンス Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown Panel4.AllowDrop = True Button1.Text = "Form2に描画" End Sub Private Sub Panel1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown, Panel2.MouseDown, Panel3.MouseDown sender.DoDragDrop(sender, DragDropEffects.Move) End Sub Private Sub Panel4_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel4.DragDrop Dim srsPnl As Panel = e.Data.GetData(GetType(Panel)) Dim dstPnl As New Panel dstPnl.Size = srsPnl.Size dstPnl.Location = Panel4.PointToClient(CursorPosition) 'New Point(e.X, e.Y) dstPnl.BackColor = srsPnl.BackColor AddHandler dstPnl.MouseDown, AddressOf dstPnl_MouseDown AddHandler dstPnl.MouseMove, AddressOf dstPnl_MouseMove Panel4.Controls.Add(dstPnl) End Sub Private Sub Panel4_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel4.DragEnter If e.Data.GetDataPresent(GetType(Panel)) Then e.Effect = DragDropEffects.Move End If End Sub Private previousPos As Point Private Sub dstPnl_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown previousPos = CursorPosition() End Sub Private Sub dstPnl_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) If e.Button = Windows.Forms.MouseButtons.Left Then Dim nowPos As Point = CursorPosition() DirectCast(sender, Panel).Left += nowPos.X - previousPos.X DirectCast(sender, Panel).Top += nowPos.Y - previousPos.Y Console.WriteLine(nowPos.X & "-" & previousPos.X) previousPos = nowPos End If End Sub Function CursorPosition() As Point Return New Point(CInt(Cursor.Position.X / 10) * 10, CInt(Cursor.Position.Y / 10) * 10) End Function 'Button1_Click Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim pnsize As Size 'Panel4のサイズを取得 pnsize.Width = Panel4.Width pnsize.Height = Panel4.Height 'Panel4のサイズをプロパティに書き込む capt.sze = pnsize Dim space As New Bitmap(Panel4.Width, Panel4.Height) Panel4.DrawToBitmap(space, New Rectangle(0, 0, Panel4.Width, Panel4.Height)) 'Bitmapオブジェクトをプロパティに書き込む capt.mp = space End Sub End Class Public Class btmap Shared _sze As Size Shared _mp As Bitmap 'Panel4のサイズのプロパティ Public Property sze() As Size Get Return _sze End Get Set(value As Size) _sze = value Dim f2 As New Form2 ' Class Form2インスタンス f2.Show() End Set End Property 'Bitmapオブジェクトをプロパティ Public Property mp() As Bitmap Get Return _mp End Get Set(value As Bitmap) _mp = value End Set End Property End Class Class Form2側 Public Class Form2 Dim bt As New btmap 'Class btmapのインスタンス Private Sub f() Handles MyBase.Shown '+ 8と+ 34はjavaではFormのタイトルの部分と枠を考慮した場合の値です。 'Class btmapからPanel4のサイズを取得 Me.Size = New Size(bt.sze.Width + 8, bt.sze.Height + 34) ' PictureBoxに描画 PictureBox1.Image = bt.mp End Sub End Class
その他の回答 (1)
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
画像キャプチャの場合 ボタンクリックイベントを下記のように変更してください。 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim pnsze As Rectangle pnsze = Me.RectangleToScreen(Panel4.Bounds) Dim space As New Bitmap(pnsze.Width, pnsze.Height, PixelFormat.Format32bppArgb) Dim g As Graphics = Graphics.FromImage(space) g.CopyFromScreen(pnsze.X, pnsze.Y, 0, 0, pnsze.Size, CopyPixelOperation.SourceCopy) Dim pnsize As Size 'Panel4のサイズを取得 pnsize.Width = Panel4.Width pnsize.Height = Panel4.Height 'Panel4のサイズをプロパティに書き込む capt.sze = pnsize 'Bitmapオブジェクトをプロパティに書き込む capt.mp = space End Sub よろしくお願いします。
お礼
回答ありがとうございます。 問題を解決することができました。また質問させていただくことがあるかと思いますが、 その時はまたお願いします。