VB.NET一个加载应用程序和默认设置的函数

VB.NET一个加载应用程序和默认设置的函数,vb.net,settings,default,user-defined,my.settings,Vb.net,Settings,Default,User Defined,My.settings,VB2010。我试图创建一个例程,将所有设置加载到一个可能有50个控件的表单中。第一种情况是加载所有用户定义的设置。第二种情况加载所有应用程序默认设置。我最近发现我下面的例行公事不起作用,因为两个设置课程都是一样的 Private Sub LoadSettingsIntoControls(stsType As Integer) Dim stsClass As My.MySettings Select Case stsType Case 0 ' user-defi

VB2010。我试图创建一个例程,将所有设置加载到一个可能有50个控件的表单中。第一种情况是加载所有用户定义的设置。第二种情况加载所有应用程序默认设置。我最近发现我下面的例行公事不起作用,因为两个设置课程都是一样的

Private Sub LoadSettingsIntoControls(stsType As Integer)
    Dim stsClass As My.MySettings
    Select Case stsType 
        Case 0 ' user-defined
            stsClass = My.Settings
        Case 1 'app default 
            stsClass = My.MySettings.Default 'this is the same as My.Settings
        Case Else
            Throw New Exception("Invalid settings type.")
    End Select

    txtTmpDir.Text = stsClass.TempDir
    txtDataPath.Text = stsClass.DataPath

    '<about 50 more controls> 
End Sub

我一直在尝试将用户定义和应用程序默认设置合并到一个例程中,但一直未能做到这一点。我想要的是,在我更改设置变量名时,几乎不需要维护的东西。我一直在看文档和样本,但没有发现任何可靠的东西。有什么建议吗?

您应该用前缀定义所有默认属性(例如:def_TempDir) 然后你可以做如下事情:

Enum EN_PropertyType
    User
    Application
End Enum

Sub LoadSettingsIntoControls(typ As EN_PropertyType)
    For Each ctl In Me.Controls
        If ctl.GetType = (New TextBox).GetType Then
            Dim SettingName As String = ""
            Select Case typ
                Case EN_PropertyType.Application
                    SettingName = "def_" & Mid(ctl.name, 4)
                Case EN_PropertyType.User
                    SettingName = Mid(ctl.name, 4)
            End Select
            ctl.Text = My.Settings.Item(SettingName)
        End If
    Next
End Sub

你能解释一下你的代码到底应该做什么吗?前缀位是一种非正统的方法,但也可以(在任何情况下,您都应该说明非正统方法的原因:没有任何属性来处理它吗?)。您正在考虑进一步的问题,这些问题的要点不完全清楚(通过控制循环);您使用的是旧的VB6函数(Mid),如果它们使用与.NET不同的索引(在.NET中所有索引都从零开始,这些函数从1开始),那么它们的使用是非常不可取的。我也不确定这个答案。你说“所有默认属性”就好像它是一个单独的变量。通过查看“我的项目”的“设置”页面,变量具有名称、类型、范围和值(这是默认值)。默认属性没有特殊的命名。
Enum EN_PropertyType
    User
    Application
End Enum

Sub LoadSettingsIntoControls(typ As EN_PropertyType)
    For Each ctl In Me.Controls
        If ctl.GetType = (New TextBox).GetType Then
            Dim SettingName As String = ""
            Select Case typ
                Case EN_PropertyType.Application
                    SettingName = "def_" & Mid(ctl.name, 4)
                Case EN_PropertyType.User
                    SettingName = Mid(ctl.name, 4)
            End Select
            ctl.Text = My.Settings.Item(SettingName)
        End If
    Next
End Sub