SettingsProviderの作成
My.Settingsでは格納変数のスコープとして、ユーザー単位又はアプリケーション単位の2種類がある。
ユーザー単位の特徴
- 1 プロラムからデータの読取り及び書込みが行える
- 2
アプリケーション単位の特徴
| ユーザー |
ユーザ単位でデータを保管し、プログラムからデータの読取り及び書込み行える |
| アプリケーション |
アプリケーション単位でデータを保管し、プログラムからは読取りのみ行えるで値を保存することは出来ない |
Imports System.Configuration
Imports System.Xml
Public Class LocalXMLSettingsProvider
Inherits SettingsProvider
''' <summary>
''' 実行中のアプリケーション名
''' </summary>
''' <remarks></remarks>
Private gApplicationName As String
''' <summary>
''' プロバイダ名
''' </summary>
''' <remarks></remarks>
Private Const gProviderName As String = "LocalXMLSettingProvider"
''' <summary>
''' データ格納ファイル
''' </summary>
''' <remarks></remarks>
Private gSettingsFileName As String
Private gXMLSettingsNode As String
''' <summary>
''' コンストラクタ
''' </summary>
Public Sub New()
Me.gApplicationName = String.Empty
gSettingsFileName = Me.GetType.Assembly.Location & ".XMLConfig"
End Sub
Public Overrides Sub Initialize(ByVal pname As String, _
ByVal config As System.Collections.Specialized.NameValueCollection)
'設定プロバイダ名を指定する
MyBase.Initialize(gProviderName, config)
gXMLSettingsNode = My.Settings.ToString
End Sub
''' <summary>
''' 現在実行中のアプリケーション名
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Overrides Property ApplicationName() As String
Get
Return gApplicationName
End Get
Set(ByVal value As String)
gApplicationName = value
End Set
End Property
''' <summary>
'''
''' </summary>
''' <param name="context"></param>
''' <param name="collection"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Overrides Function GetPropertyValues( _
ByVal context As System.Configuration.SettingsContext, _
ByVal collection As System.Configuration.SettingsPropertyCollection) As System.Configuration.SettingsPropertyValueCollection
Dim colSettingsValues As New SettingsPropertyValueCollection()
' XMLファイル読み込み準備
Dim xmlPathDom As XPath.XPathDocument = New XPath.XPathDocument(gSettingsFileName)
Dim xmlPathNavi As XPath.XPathNavigator = xmlPathDom.CreateNavigator()
Dim xmlPathNode As XPath.XPathNodeIterator
For Each settingsPropery As SettingsProperty In collection
' SettingPropertyValueを取得する
Dim settingsValue As SettingsPropertyValue = New SettingsPropertyValue(settingsPropery)
' XMLファイルからデータを検索する
xmlPathNode = DirectCast(xmlPathNavi.Evaluate(String.Format("//Settings/{0}/setting[@name='{1}']", gXMLSettingsNode, settingsPropery.Name)), XPath.XPathNodeIterator)
If xmlPathNode.Count > 0 Then
xmlPathNode.MoveNext()
settingsValue.SerializedValue = xmlPathNode.Current.Value
End If
settingsValue.IsDirty = False
colSettingsValues.Add(settingsValue)
Next
Return colSettingsValues
End Function
''' <summary>
'''
''' </summary>
''' <param name="context"></param>
''' <param name="collection"></param>
''' <remarks></remarks>
Public Overrides Sub SetPropertyValues( _
ByVal context As System.Configuration.SettingsContext, _
ByVal collection As System.Configuration.SettingsPropertyValueCollection)
Dim xmlsettings As XmlWriterSettings = New XmlWriterSettings()
Dim xmlWriter As XmlWriter
xmlsettings.Indent = True
xmlsettings.IndentChars = " "
xmlWriter = xmlWriter.Create(gSettingsFileName, xmlsettings)
xmlWriter.WriteStartElement("Settings")
xmlWriter.WriteStartElement(gXMLSettingsNode)
For Each settingsValue As SettingsPropertyValue In collection
xmlWriter.WriteStartElement("setting")
xmlWriter.WriteAttributeString("name", settingsValue.Name)
If settingsValue.SerializedValue Is Nothing Then
xmlWriter.WriteAttributeString("serializeAs", settingsValue.PropertyValue.GetType.Name)
xmlWriter.WriteStartElement("value")
xmlWriter.WriteValue(settingsValue.PropertyValue.ToString)
xmlWriter.WriteEndElement()
Else
xmlWriter.WriteAttributeString("serializeAs", settingsValue.SerializedValue.GetType.Name)
xmlWriter.WriteStartElement("value")
xmlWriter.WriteValue(settingsValue.SerializedValue)
xmlWriter.WriteEndElement()
End If
xmlWriter.WriteEndElement()
settingsValue.IsDirty = False
Next
xmlWriter.WriteEndElement()
xmlWriter.WriteEndElement()
xmlWriter.Flush()
End Sub
End Class
最終更新:2008年08月16日 22:16