.NET CFVisual Studio .NET 2003.NET 1.1Visual Studio 2005.NET 2.0移动应用中级开发Visual StudioWindows.NETVisual Basic
Compact Framework 的 AppSetting 替换
一个用于替换紧凑框架中 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