如何在以前执行的基础上加载表单?

时间:2013-12-23 05:16:55

标签: vb.net

我在Vb.net上创建了一个表单,用户可以在其中进行多处更改。我希望每次执行时都会保留用户所做的更改。

例如,我在执行时对字体应用了一些效果 -

Private Sub Checkbox1_CheckedChanged ()
   If CheckBox1.Checked = True then
        Label1.Font = New Drawing Style ("Comic Sans Ms", 16, FontStyle.Bold)
   End If
End Sub

下次执行程序时,用户所做的更改应该会显示。

有可能吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

标记答案是我将如何操作如果您希望存储多个不同控件的更改,您最好循环使用它们并检查表单关闭时的设置并将其存储在System.Collections.Specialized.StringCollection中的My.Settings,然后您可以在表格加载上循环浏览此集合,并按原样设置设置。

如果你想要一个例子,请告诉我,我可以提供。

示例:

注意:我总是在添加System.Collections.Specialized.StringCollection时发现你需要手动添加一个空字符串(然后你可以删除它)来强制它创建.xml(可能是一个更加技术性的解决方案)但它适用于我)

我创建了一个名为FormLoadData的人 要识别存储数据的控件,我将其名称加上“UC_”,如果它是表单上的所有控件或者组合框中的所有控件等,那么您可以跳过此检查。

然后添加以下表格结束子:

 Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    'clear collection
    My.Settings.FormLoadData.Clear()
    'loop through each control on the form
    For Each Con As Control In Me.Controls
        'run check to see if it is a control to store changes for
        If Con.Name.Substring(0, 3) = "UC_" Then
            'load any settings you wish to store in the collection starting with the control ID
            My.Settings.FormLoadData.Add(Con.Name & "," & Con.Font.ToString)
        End If
    Next
End Sub

以及New下的以下内容:

 Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    'loop through controls
    For Each Con As Control In Me.Controls
        'loop through settings to compare
        For Each item In My.Settings.FormLoadData
            'check stored name against control name
            If Con.Name = item.Split(",").ElementAt(0) Then
                'update settings 
                Con.Font = New Font(item.Split(",").ElementAt(1), Con.Font.Size)
                MsgBox(item)
                Exit For
            End If
        Next item
    Next Con
End Sub

肯定有一种更好的方法可以做到这一点而不是循环创建集合,但除非你存储数千个控件的数据,否则这样就行了。

我的浏览器正在播放,所以我无法查看它的外观,但希望很清楚!

答案 1 :(得分:1)

是的,您可以将外部Css文件用于此目的

首先,您创建项目的外部Css文件并指定一些默认样式

与您的Css文件一样

.Fstyle {
    font-family: Comic Sans Ms;
    }

你的aspx

<asp:label id="lblname" runat="server" class="Fstyle">

第二,您可以通过用户所做的更改重新写入此文件 保存对变量的更改并使用vb.net的IO功能覆盖此文件,它仍然是永久更改。

答案 2 :(得分:1)

您有几个选项,如果您要进行一些设置,我将使用的选项是内置User Settings,您可以在Project Propertys中创建一个设置。这是您的字体的一个示例。

enter image description here

然后你会像这样使用它。

Private Sub Checkbox1_CheckedChanged() Handles CheckBox1.CheckedChanged
    If CheckBox1.Checked = True Then
        Label1.Font = New Font("Comic Sans Ms", 16, FontStyle.Bold)
        My.Settings.MyNewFont = Label1.Font
        My.Settings.Save()
    End If
End Sub

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()
    If Not IsNothing(My.Settings.MyNewFont) Then Label1.Font = My.Settings.MyNewFont

End Sub