我正在寻找一种解决方案来保存动态创建的图片框及其设置。我不太清楚我会怎么做。当表单加载时,这些图片框也需要加载回程序。
也许他们可以保存到数据库中,我们怎么做?
创建图片框的代码
PictureBox picturebox1 = new PictureBox();
picturebox1.Name = "picturebox1";
picturebox1.Size = new Size(48, 48);
picturebox1.BackgroundImage = Properties.Resources.FolderIcon;
myFlowLayoutPanel1.Controls.Add(picturebox1);
任何想法都非常受欢迎。谢谢。
答案 0 :(得分:1)
串联一小部分控件并不困难。如果项目已有数据库,我可以改用它。
第一个问题是无法直接序列化控件。您需要一个类来保存重新创建它们所需的数据:
<Serializable>
Friend Class CtlItem
Public Property Location As Point
Public Property Size As Size
Public Property BackColor As Color
Public Property Text As String
' some serializers require a simple ctor
Public Sub New()
End Sub
' create object from passed PB
Public Sub New(pb As Button)
Location = pb.Location
Size = pb.Size
BackColor = pb.BackColor
Text = pb.Text
End Sub
End Class
我使用按钮代替图片盒,但概念是一样的。许多序列化程序需要<Serializable>
属性和简单的ctor。我没有在代码中设置所有道具,而是让课程收获了我需要保存的道具。您需要对此进行扩展以保存控件的所有非默认属性。
获取数据,序列化和测试往返:
' collection for many control descriptors
Dim btns As New List(Of CtlItem)
' collect the data for some controls
For Each btn In TabPage1.Controls.OfType(Of Button)()
btns.Add(New CtlItem(btn))
Next
' serialize the list
Using fs As New FileStream("C:\Temp\Buttons.bin", FileMode.OpenOrCreate)
fs.Position = 0
Dim bf As New BinaryFormatter
bf.Serialize(fs, btns)
End Using
' round trip test
Dim newBtns As List(Of CtlItem)
Using fs As New FileStream("C:\Temp\Buttons.bin", FileMode.Open)
Dim bf As New BinaryFormatter
newBtns = CType(bf.Deserialize(fs), List(Of CtlItem))
End Using
这使用BinaryFormatter
进行序列化,但XMLSerialzer,Protobuf-Net和json的工作方式基本相同。初始集合有19个按钮,第一个是“文件”。图像显示newBtns
colelction具有相同的数字,并且至少第一个匹配(序列化通常是全有或全无的命题)。 btns
集合,之前:
然后,您的代码将从该数据重新创建控件并将其添加到表单中。如果它们来自不同的Control
集合,当然还原图像,则可能会变得复杂。核心代码可以在CtlItem
类中:
Friend Function NewButton() As Button
Dim btn As New Button
btn.Location = Location
btn.Text = Text
btn.BackColor = BackColor
'...
Return btn
End Function
答案 1 :(得分:0)
如果图像不是太大(或不是自定义),我建议保存在数据库中。 您的表看起来像这样(在MS-SQL管理控制台中运行脚本):
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<input type="range" min="0" max="100" value="50" step="1" id="slider" style="width:500;">
<br>
<img src="http://weknowmemes.com/generator/uploads/generated/g1369409960206058073.jpg">
(当然,您需要添加SQL CRUD代码。)
希望这足以让你开始。
好的,我将添加基本的T-SQL插入代码,但请阅读以下内容: http://www.dreamincode.net/forums/topic/103960-save-and-retrieve-images-with-sql-server/