65.9K
CodeProject 正在变化。 阅读更多。
Home

Compact Framework 的 AppSetting 替换

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (4投票s)

2005年6月26日

CPOL

1分钟阅读

viewsIcon

37845

一个用于替换紧凑框架中 appSettings() 方法的类。

引言

我正在浏览 .NET Compact Framework 的文章,发现了一篇文章介绍了如何模拟 appSettings() 方法的功能,而该方法在紧凑框架中缺失。文章底部有两项请求,要求将代码以 VB.NET 而不是作者的原生 C# 呈现。

我刚刚完成一个智能设备项目,我需要保存服务器的 IP 地址,以便进行 SOAP 调用。我有一个 cConfig 类,我已经在 ASP.NET 中用于读取和写入设置,我直接在紧凑框架上重用了这个类,无需任何修改。

这个类的一个优点是,在创建对象时可以指定 CONFIG 文件的名称。在我的 ASP.NET 项目中,这允许我为不同的客户拥有不同的 CONFIG 文件。

首先要做的是创建一个 XML 文件来存储您的设置。该文件的格式与 System.ConfigurationSettings.AppSettings 文件相同

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

   <appSettings>
    <!- User application and configured property settings go here.-->
    <!- Example: <add key="settingName" value="settingValue"/> -->
    
    <!-- Configuration and Setup Section -->
    <add key="ServerIPAddr" value="192.168.1.14" />

    </appSettings>
</configuration>

接下来,创建一个新的类文件并将以下代码粘贴到文件中

Imports System.Xml
Imports System.Xml.XPath


Public Class cConfig

    Private _StrFile As String
    Private _Doc As XmlDocument = New XmlDocument

    Public Sub New(ByVal StrFile As String)
        _StrFile = StrFile
        _Doc.Load(_StrFile)
    End Sub


    Public Function GetSettingDefault(ByVal StrKey As String, _
                          ByVal StrDefault As String) As String
        Dim Node As XmlNode = _
           Doc.SelectSingleNode(_
           "configuration/appSettings/add[@key='" + StrKey + "']")
        If (Node Is Nothing) Then
            Return StrDefault
        End If
        Return ReadWithDefault(Node.Attributes("value").Value, _
                                                      StrDefault)
    End Function

    
    Public Sub SetSetting(ByVal StrKey As String, _
                             ByVal StrValue As String)
        Dim Node As XmlNode = _
           _Doc.SelectSingleNode(_
           "configuration/appSettings/add[@key='" + StrKey + "']")
        Node.Attributes("value").Value = StrValue
        _Doc.Save(_StrFile)
    End Sub
        

    Private Function ReadWithDefault(ByVal StrValue As String, _
                           ByVal StrDefault As String) As String
        Return IIf(StrValue Is Nothing, StrDefault, StrValue)
    End Function
End Class

要使用该类,请定义一个 cConfig 对象并调用 GetSettingDefault() 方法来读取设置。调用 SetSetting() 方法来序列化设置值。下面我包含了来自一个简单的选项窗体的代码

Public Class frmOptions
    Private m_sConfigFilePath As String

    Private Sub frmOptions_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles MyBase.Load
     
       m_sConfigFilePath = cApp.GetAppPath() & "config.xml"
       Dim oConfig As New cConfig(m_sConfigFilePath)
       Me.txtServerIPAddress.Text = _
           oConfig.GetSettingDefault ("ServerIPAddr", "")
    
    End Sub

    Private Sub btnOK_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnOK.Click
    
        Dim oConfig As New cConfig(m_sConfigFilePath)
        oConfig.SetSetting("ServerIPAddr", _
                    Me.txtServerIPAddress.Text)
        Me.Close()
    
    End Sub

    Private Sub btnCancel_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnCancel.Click
    
        Me.Close()
    End Sub
End Class

您可能会注意到,在窗体加载事件中,我正在调用 GetAppPath(),并且该代码包含在下面

Public Class cApp
  ' Return full path to application directory. 
  Public Shared Function GetAppPath() As String
    Dim sTemp As String = _
      System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
    sTemp = sTemp.Substring(0, sTemp.LastIndexOf("\") + 1)
    Return sTemp
  End Function
End Class
© . All rights reserved.