保存动态创建的按钮

时间:2014-01-16 09:29:38

标签: .net vb.net button

enter image description here
当我点击添加时,我可以在任何地方点击,并在运行时添加按钮(点击我) 如何保存按钮,以便下次运行应用程序时,那些4将出现在那里?此外,希望每个按钮都有不同的事件,但这不是我现在的优先事项 任何人都可以给出一个方法吗?

2 个答案:

答案 0 :(得分:0)

如果您刚刚在会话之间保存文本或控件的某些特定属性之后,那么显而易见的事情就是应用程序设置。保存动态创建的控件本身以及针对这些控件的各个事件处理程序有点超出了应用程序设置的基本用法。

我唯一可以建议的(我还没有测试过)是尝试找到一种方法来动态更改创建控件(和事件处理程序)的基本脚本,将该脚本存储在应用程序设置中然后运行下次运行应用程序时,表单上的脚本会加载。

您需要非常具体地了解您想要创建的内容,确保为所讨论的控件(位置,大小等)保存必要的属性,并且可能以避免运行脚本以及运行的方式构建它

这将涉及在此过程中进行大量错误检查。我认为你可以做到这一点,但这需要大量的工作。我首先要问自己,为什么能够这样做是如此重要,以及是否有一个更好的解决方案,我想到的整体概念。

您还应该记住,应用程序设置是特定于用户的。如果同一个人打算使用你的申请,那就不错了,如果不同的人就不那么好。

答案 1 :(得分:0)

您实际上无法保存按钮,但您可以保存允许您创建新按钮以显示在同一位置的信息。一种方法可能是设置 - 只需保存每个的大小和位置。另一种方法是序列化:

 Friend _ctrls As List(Of ControlSettings)

<Serializable>
 Public Class ControlSettings
    Public Property ctrlLocation As Point

    Public Property CtrlSize as Size

    ' likely other things:
    Public Property CameraID As Integer
    Public Property CtrlText As String
    ... etc
 End Class

要保存设置,请从表单按钮中收集所有相关道具:

 Dim cs As New ControlSettings

 With cs
     .ctrlLocation = thisButton.Location
     .CtrlSize = thisButton.Size
     ' etc
  End With
 _ctrls.Add(cs)

完成后,_ctrls将包含所有按钮的所有信息。接下来,序列化它:

 Dim mUserFile As String = UsersFolder_Location_And_Name

 Dim fs As New FileStream(mUserFile, FileMode.Create, FileAccess.Write)

 Serializer.Serialize(fs, _ctrls)
 fs.Close()
 fs.Dispose()

下次应用程序运行时,您按相反的顺序加载信息,并从值中创建新按钮:

Dim Btn as New Button
btn.Location = _ctrls(n).ctrlLocation 
btn.Size = _ctrls(n).CtrlSize 
theForm.Controls.Add(btn)

' rehook the event handler(s)
AddHandler btn.Click, AddressOf btn_Click