Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将我的设置重置为上次保存的值_Vb.net_My.settings - Fatal编程技术网

Vb.net 将我的设置重置为上次保存的值

Vb.net 将我的设置重置为上次保存的值,vb.net,my.settings,Vb.net,My.settings,我目前正在使用“设置”表单为我的应用程序设置各种设置。我试图做的是将设置恢复到用户在打开和更改字段之前所做的任何更改。我有一个文本框,其中的数据绑定到一个设置,当我进行更改并单击“确定”时,它将在下次打开时保存。当我点击cancel时,它也会被保存。不太确定我是否正确处理了这个问题 Public Class frmSettings Private _mysettings As Configuration.SettingsBase Private Sub frmSettings_

我目前正在使用“设置”表单为我的应用程序设置各种设置。我试图做的是将设置恢复到用户在打开和更改字段之前所做的任何更改。我有一个文本框,其中的数据绑定到一个设置,当我进行更改并单击“确定”时,它将在下次打开时保存。当我点击cancel时,它也会被保存。不太确定我是否正确处理了这个问题

Public Class frmSettings
    Private _mysettings As Configuration.SettingsBase

    Private Sub frmSettings_Load(...) Handles Me.Load
        _mysettings = My.Settings
    End Sub

    Private Sub btnCancel_Click(...) Handles btnCancel.Click
        For Each p As Configuration.SettingsPropertyValue In _mysettings.PropertyValues
            My.Settings(p.Name) = p.PropertyValue
        Next
        Me.Close()
    End Sub

    Private Sub btnOkay_Click(...) Handles btnOkay.Click
        My.Settings.Save()
        Me.Close()
    End Sub
End Class

不使用数据绑定控件,只需在加载设置窗体时加载设置值即可。这样做很简单,而且很有效。否则,您必须克隆My.Settings:doing
\u mysettings=My.Settings
只创建指向My.Settings的指针,而不是它的副本

例如,我有一个名为ChangeConnectionString的表单,它有OK/Cancel按钮和一个名为connString的文本框控件:

Public Class ChangeConnectionString

    Private Sub bnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnOK.Click
        My.Settings.connectionString = connString.Text
        My.Settings.Save()
        Me.Close()
    End Sub

    Private Sub bnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnCancel.Click
        Me.Close()
    End Sub

    Private Sub ChangeConnectionString_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        connString.Text = My.Settings.connectionString
    End Sub

End Class

谢谢你的回答,安德鲁。我最终做的是创建几个类来保存设置,并在表单加载时循环保存设置。然后,如果我取消,我将循环返回保存的设置并重置My.settings。我的设置页面有30多个设置,我试图节省一些空间。这并非毫无意义,但根据您下面的评论,序列化设置类是简化保存/加载的一个好方法。当数据在类中时,以3或4行将其全部保存到一个文件中,下次重新加载数据的时间尽可能少。无需读取值或将其发回MySettings