可能没有简单的解决方案,但我基本上想要一些方法来保存一堆控件及其属性。
我允许用户添加控件,例如图片和标签(在运行时)。我想在某些时候回顾所有这些控件,就像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
Serializer加下划线,我不确定我是否正确声明了myList (我已导入System.IO& System.Xml.Serialization,如果重要的话)
答案 0 :(得分:0)
通过Panel的Controls数组,将相关数据(大小?图像文件的名称等)收集到集合或列表中。理想情况下,每个控件的统计信息将存储在一个类中,并将其中的大部分存储到List(SavedControl)中。然后序列化List。
Friend Class SavedControl
friend theName as String
friend theSize as Size
friend theLocation as Point
friend imgFile as String
End Class
存储每个控件的数据
SaveCtl as New SavedControl
SaveCtl.theSize = pnl.Controls(n).Size
... etc
myList.Add(SaveCtl)
然后使用二进制或xml序列化程序将List保存到文件。我通常使用不同的序列化程序,但这就是它的全部内容:
Try
Dim fs As New FileStream(SavedInfoFile, FileMode.Create, FileAccess.Write)
Serializer.Serialize(fs, myList)
fs.Close()
fs.Dispose()
Catch ex As Exception
MessageBox.Show("Oops!", MsgTitle, MessageBoxButtons.OK, _
MessageBoxIcon.Exclamation)
End Try
编辑(答案)
如何保存控件。它保存相关信息,以便可以从收集和存储的数据中重建它们,例如它们的大小,位置,名称和使用的图像。请记住,我不知道它是什么或做了什么,看起来像是什么或行为或控制是什么样的!
在哪里?无论你给它什么名字。示例中的SavedInfoFile
什么类型的文件......这有关系吗?如果您使用二进制序列化程序,XML for XML和二进制文件,它将是二进制数据。
我如何阅读数据......只需反过来做所有事情。反序列化,循环遍历列表并根据您收集的数据创建控件。