none
如何遍历 My.Setting 中用户范围的各项? RRS feed

全部回复


  •         For Each p As SettingsProperty In My.Settings.Properties
                'p.Name:遍历所有的Name

                'My.Settings.Properties(p.Name).DefaultValue:获取所用对应Name的Value
            Next


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 大海怪 2011年5月21日 1:24
    • 取消答案标记 大海怪 2011年5月21日 23:54
    2011年5月20日 6:12
    版主
  • 谢谢回复!该如何判断其范围是“应用程序”还是“用户”呢?
    韩立学
    2011年5月21日 0:11
  • 您好:)

    忘记说一件事情了——Scope没有单独的属性可以判断。因为Scope是特性。因此您必须这样做。

    假设你有3个自定义的Settings文件设置(先通过Settings文件举例),VB。net代码:

    '------------------------------------------------------------------------------
    ' <auto-generated>
    '     This code was generated by a tool.
    '     Runtime Version:4.0.30319.225
    '
    '     Changes to this file may cause incorrect behavior and will be lost if
    '     the code is regenerated.
    ' </auto-generated>
    '------------------------------------------------------------------------------

    Option Strict On
    Option Explicit On

     

    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _
     Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")>  _
    Partial Friend NotInheritable Class Settings1
        Inherits Global.System.Configuration.ApplicationSettingsBase
       
        Private Shared defaultInstance As Settings1 = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings1()),Settings1)
       
        Public Shared ReadOnly Property [Default]() As Settings1
            Get
                Return defaultInstance
            End Get
        End Property
       
        <Global.System.Configuration.UserScopedSettingAttribute(),  _
         Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
         Global.System.Configuration.DefaultSettingValueAttribute("Value1")>  _
        Public Property Setting1() As String
            Get
                Return CType(Me("Setting1"),String)
            End Get
            Set
                Me("Setting1") = value
            End Set
        End Property
       
        <Global.System.Configuration.UserScopedSettingAttribute(),  _
         Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
         Global.System.Configuration.DefaultSettingValueAttribute("Value2")>  _
        Public Property Setting2() As String
            Get
                Return CType(Me("Setting2"),String)
            End Get
            Set
                Me("Setting2") = value
            End Set
        End Property
       
        <Global.System.Configuration.ApplicationScopedSettingAttribute(),  _
         Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
         Global.System.Configuration.DefaultSettingValueAttribute("Value3")>  _
        Public ReadOnly Property Setting3() As String
            Get
                Return CType(Me("Setting3"),String)
            End Get
        End Property
    End Class

    那么判断:

     Dim r = From p In GetType(Settings1).GetProperties()
                    Where p.GetCustomAttributes(GetType(Global.System.Configuration.UserScopedSettingAttribute), False).Length > 0
                    Select New With
                           {
                               .PropertyName = p.Name,
                               .PropertyValue = Settings1.Default.Properties(.PropertyName).DefaultValue
                               }

            For Each p In r
                Console.WriteLine(p.PropertyName & "<=====>" & p.PropertyValue)
            Next

    因此我们可以得到一般统计My.Settings的公式:
      Dim r = From p In GetType(My.MySettings).GetProperties()
                    Where p.GetCustomAttributes(GetType(Global.System.Configuration.UserScopedSettingAttribute), False).Length > 0
                    Select New With
                           {
                               .PropertyName = p.Name,
                               .PropertyValue = Settings1.Default.Properties(.PropertyName).DefaultValue
                               }

            For Each p In r
                Console.WriteLine(p.PropertyName & "<=====>" & p.PropertyValue)
            Next


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 大海怪 2011年5月21日 23:54
    2011年5月21日 1:16
    版主
  • 你好:)

    您标记错误了,建议标记我最后一个回复(完整的)。谢谢。请顺便取消第一次的回复。
    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月21日 10:05
    版主