これにはおそらく簡単な解決策はありませんが、基本的には、一連のコントロールとそのプロパティを保存する方法が必要です。
ユーザーが画像やラベルなどのコントロールを (実行時に) 追加できるようにしています。PowerPoint のように、ある時点でこれらすべてのコントロールを参照できるようにしたいと考えています。特定のパネルにのみコントロールを追加できます。
最初に、各コントロールのプロパティをテキスト ドキュメントに格納して、各コントロールのプロパティを 1 行に書き込み、「¬」で分割して分割できるようにすることを考えましたが、非常に混乱し、特定のプロパティを読み書きすることになりました。ラインは、最初に想像したよりも少し難しいですが、最終的にはやりました。
私の現在の解決策は、単にパネルを「スナップショット」して画像を保存することですが、ストレージに関する限り、これがおそらく最も効率的な方法ではないことにすぐに気付きました。
「パネルの写真を撮る」コード...
Using bmp As New Bitmap(QuizDesignPanel.Width, QuizDesignPanel.Height)
bmp.SetResolution(My.Computer.Screen.BitsPerPixel, My.Computer.Screen.BitsPerPixel)
QuizDesignPanel.DrawToBitmap(bmp, New Rectangle(0, 0, QuizDesignPanel.Width, QuizDesignPanel.Height))
bmp.Save(QuizPath & "\" & FileName & Number & ".png", Imaging.ImageFormat.Png)
End Using
...明らかに、他の場所で宣言されている変数がいくつかあります。
私は間違った方向に向かっているのか、プロパティを保存するためのより良い方法があるのか どうか疑問に思っていました.
うまく説明できていないかもしれませんが、私の言っていることはきっと理解していただけると思います。事前にご協力いただきありがとうございます。
また、実行時にコントロールをコピーして貼り付ける簡単な方法はありますか? 私は現在、プロパティをテキストとしてクリップボードに保存し、コントロールを貼り付けるときにそれらを参照しているだけです。
編集
Friend Class SavedControl
Friend theName As String
Friend theSize As Size
Friend theLocation As Point
Friend imgFile As String
End Class
Private Sub TopPanel_Paint(sender As Object, e As PaintEventArgs) Handles TopPanel.Paint
Dim SaveCtl As New SavedControl
Dim myList As Collection
For Each n As Control In QuizDesignForm.QuizDesignPanel.Controls
SaveCtl.theSize = n.Size
SaveCtl.theName = n.Name
SaveCtl.theLocation = n.Location
myList.Add(SaveCtl)
Next
Try
Dim fs As New FileStream(My.Computer.FileSystem.SpecialDirectories.Desktop, FileMode.Create, FileAccess.Write)
Serializer.Serialize(fs, myList)
fs.Close()
fs.Dispose()
Catch ex As Exception
MessageBox.Show("Oops!", "Title", MessageBoxButtons.OK, _
MessageBoxIcon.Exclamation)
End Try
End Sub
Serializer には下線が引かれていて、myList を正しく宣言したかどうかわかりません (問題があれば、System.IO と System.Xml.Serialization をインポートしました)。