对此可能没有简单的解决方案,但我基本上想要某种方法来保存一堆控件及其属性。
我允许用户添加控件,例如图片和标签(在运行时)。我想以某种方式回顾所有这些控件,就像 PowerPoint 一样。他们只能将控件添加到某个面板。
我首先想到将每个控件的属性存储在文本文档中,方法是遍历每个控件的属性并将它们写入一行,用“¬”分隔它们,以便可以拆分它们,但我非常困惑并且阅读和写入特定的线条比我最初想象的要困难一些,尽管我最终做到了。
我目前的解决方案是简单地“快照”面板并保存图像,但很快意识到这可能不是最有效的方式,就存储而言。
“为面板拍照”的代码...
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
序列化程序带有下划线,我不确定我是否正确声明了 myList(我已经导入了 System.IO 和 System.Xml.Serialization,如果重要的话)