Ud over det med Sidse Babett, forstod jeg desværre ikke ret meget af det. :)
Jeg er helt ny i VB.NET, så måske du kunne forklare lidt - eller endnu bedre komme med et konkret eksempel?
Dette er min kode som skal eksekveres ved opstart, men som også skal kunne kaldes løbende:
Public Sub LoadSettings()
Dim SystemReader As New System.IO.StreamReader("Settings.xml") Dim XMLTextReader As New System.Xml.XmlTextReader(SystemReader) Dim SettingsDoc As New System.Xml.XmlDocument
SettingsDoc.Load(XMLTextReader)
Dim SettingItems As System.Xml.XmlNodeList = SettingsDoc.SelectNodes("settings/items")
Dim SoundAlert As System.Xml.XmlNode = SettingItems.Item(0).SelectSingleNode("soundalert") Dim PopupAlert As System.Xml.XmlNode = SettingItems.Item(0).SelectSingleNode("popupalert")
Dim SoundAlertActive As String = SoundAlert.InnerText Dim PopupAlertActive As String = PopupAlert.InnerText
Noget i stil med (find selv et bedre klassenavn end Singleton):
Public Class Singleton Private Shared FInstance As Singleton = Nothing
Private FSoundAlert As String // osv med andre data du vil eksponere
Private Sub New() // Din kode her hvor du indlæser data FSoundAlert = ... End Sub
Public Sub Save() // Noget kode der gemmer settings End Sub
Public Shared ReadOnly Property Instance() As Singleton Get If (FInstance Is Nothing) Then FInstance = New Singleton() End If
Return FInstance End Get End Property
Public Property SoundAlert() As String Get FSoundAlert End Get End Property
// osv for andre properties
End Class
Ok. Nu er det smarte så at du alle andre steder i din kode altid får fat i én og samme instans af Singleton-klassen. Dermed er de properties der er på Singleton klassen reelt globale data.
... aVar = Singleton.Instance.SoundAlert ...
og
... Singleton.Instance.SoundAlert = "new setting" ...
Har prøvet at tilpasse koden du sendte, men får problemer ved de 2 "Public Property" områder:
Public Class SystemSettings
Private Shared FInstance As SystemSettings = Nothing
Private SoundAlertActive As String Private PopupAlertActive As String
Private Sub LoadSettings()
Dim SystemReader As New System.IO.StreamReader("Settings.xml") Dim XMLTextReader As New System.Xml.XmlTextReader(SystemReader) Dim SettingsDoc As New System.Xml.XmlDocument
SettingsDoc.Load(XMLTextReader)
Dim SettingItems As System.Xml.XmlNodeList = SettingsDoc.SelectNodes("settings/items")
Dim SoundAlert As System.Xml.XmlNode = SettingItems.Item(0).SelectSingleNode("soundalert") Dim PopupAlert As System.Xml.XmlNode = SettingItems.Item(0).SelectSingleNode("popupalert")
Åh! Jeg så ikke præcis hvad du har skrevet i din kode. Du mangler en Constructor til klassen. Normalt er en constructor public; men singletons har private constructors (det er det der sikrer du altid får den samme instans).
Men hvis du ændrer navnet på LoadSettings() til SystemSettings(), så burde den blive klassens (private) constructor, og så skulle det gerne soille.
Håber jeg har fået strikket det sådan sammen, at jeg kan genbruge meget af det til et senere projekt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.