Click here to Skip to main content
6,633,937 members and growing! (23,453 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » Mobile Development » General     Intermediate

AppSettings Implementation for Compact Framework

By pbrooks

Learn how to create a settings class that will make it easy to access and store your application settings.
C#, Windows, .NET CF, .NET, MobileVS.NET2003, Dev
Posted:2 Mar 2004
Updated:23 Mar 2004
Views:59,573
Bookmarked:49 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
22 votes for this article.
Popularity: 5.64 Rating: 4.20 out of 5

1
2 votes, 9.1%
2
2 votes, 9.1%
3
3 votes, 13.6%
4
15 votes, 68.2%
5

Sample Image - SaveSettings.jpg

Introduction

The .NET Compact Framework does not contain an AppSettings class like the full framework. On the full .NET Framework a developer could gain access to settings stored in the App.Config file by creating a name value collection from the System.Configuration.ConfigurationSettings.AppSettings class. As an advocate of uniformity, I wanted to create something that had similar functionality on the Compact Framework. This article will show you what I came up with.

Using the code

My first step was to create an XML file that looked a lot like the App.Config file in .NET.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="ServerIP" value="192.168.5.22" />
        <add key="UserName" value="testuser" />
        <add key="Password" value="jdhs822@@*" />
        <add key="PhoneNumber" value="5555555555" />
        <add key="TimeOut" value="60" />
        <add key="LastTransmit" value="03/03/2004 9:12:33 PM" />
        <add key="DatabasePath" value="\Program Files\DB\test.sdf" />
    </appSettings>
</configuration>

I named this file Settings.xml and added it to my project with a build action of content. This ensures that the file will get downloaded to my program's executing folder.

My next step was to create a new class called Settings. This class contains only static members so the settings are accessed from the file only once during program execution and the entire program will have easy access to these values.

I wanted the settings to be loaded as soon as the settings were accessed, so I created a static constructor and placed my XML parsing code inside the constructor.

m_settings is a NameValueCollection that stores all of the settings.

public class Settings
{
    private static NameValueCollection m_settings;
    private static string m_settingsPath;

    // Static Ctor

    static Settings()
    {
        // Get the path of the settings file.

        m_settingsPath = Path.GetDirectoryName(
        System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
        m_settingsPath += @"\Settings.xml";

        if(!File.Exists(m_settingsPath))
            throw new FileNotFoundException(
                              m_settingsPath + " could not be found.");

        System.Xml.XmlDocument xdoc = new XmlDocument();
        xdoc.Load(m_settingsPath);
        XmlElement root = xdoc.DocumentElement;
        System.Xml.XmlNodeList nodeList = root.ChildNodes.Item(0).ChildNodes;

        // Add settings to the NameValueCollection.

        m_settings = new NameValueCollection();
        m_settings.Add("ServerIP", nodeList.Item(0).Attributes["value"].Value);
        m_settings.Add("UserName", nodeList.Item(1).Attributes["value"].Value);
        m_settings.Add("Password", nodeList.Item(2).Attributes["value"].Value);
        m_settings.Add("PhoneNumber",
                                  nodeList.Item(3).Attributes["value"].Value);
        m_settings.Add("TimeOut", nodeList.Item(4).Attributes["value"].Value);
        m_settings.Add("LastTransmit",
                                  nodeList.Item(5).Attributes["value"].Value);
        m_settings.Add("DatabasePath",
                                  nodeList.Item(6).Attributes["value"].Value);
    }
}

Now, we need some public accessors to retrieve the values from the NameValueCollection.

public static string ServerIP
{
    get { return m_settings.Get("ServerIP"); }
    set { m_settings.Set("ServerIP", value); }
}

public static string UserName
{
    get { return m_settings.Get("UserName"); }
    set { m_settings.Set("UserName", value); }
}

// ... And so on

The only thing left to do is to add a method for updating our settings. The XmlTextWriter class provides us with a light-weight mechanisim for writing xml to a FileStream. We iterate through the NameValueCollection and create the settings in xml.

public static void Update()
{
    XmlTextWriter tw = new XmlTextWriter(m_settingsPath,
                                       System.Text.UTF8Encoding.UTF8);
    tw.WriteStartDocument();
    tw.WriteStartElement("configuration");
    tw.WriteStartElement("appSettings");

    for(int i=0; i<m_settings.Count; ++i)
    {
        tw.WriteStartElement("add");
        tw.WriteStartAttribute("key", string.Empty);
        tw.WriteRaw(m_settings.GetKey(i));
        tw.WriteEndAttribute();

        tw.WriteStartAttribute("value", string.Empty);
        tw.WriteRaw(m_settings.Get(i));
        tw.WriteEndAttribute();
        tw.WriteEndElement();
    }

    tw.WriteEndElement();
    tw.WriteEndElement();

    tw.Close();
}

Now we can easily access our settings from anywhere in our application!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

pbrooks


Member
Check out my blog! http://www.pagebrooks.com
Occupation: Software Developer (Senior)
Location: United States United States

Other popular Mobile Development articles:

  • Writing Your Own GPS Applications: Part 2
    In part two of the series, the author of "GPS.NET" teaches developers how to write GPS applications suitable for the real world by mastering GPS precision concepts. Source code includes a working NMEA interpreter and sample high-precision application in C# and VB.NET.
  • Writing Your Own GPS Applications: Part I
    What is it that GPS applications need to be good enough to use for in-car navigation? Also, how does the process of interpreting GPS data actually work? In this three-part series, I will cover both topics and give you the skills you need to write a commercial-grade GPS application.
  • Learn How to Find GPS Location on Any SmartPhone, and Then Make it Relevant
    A step by step tutorial for getting GPS from any SmartPhone, even without GPS built in, and then making location useful.
  • iPhone UI in Windows Mobile
    It's an interface that works with transparency effects. As a sample I used an interface just like the iPhone one. In this tutorial I am explaining how simple is working with transparency on Windows Mobile.
  • Pocket 1945 - A C# .NET CF Shooter
    An article on Pocket PC game development
Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 13 of 13 (Total in Forum: 13) (Refresh)FirstPrevNext
QuestionLittle problem Pinmember7:29 16 Mar '07  
GeneralAccess Violation Error Pinmemberr20j1:18 30 Nov '05  
GeneralVery Useful PinmemberPaul Baker11:54 18 Aug '05  
GeneralXML File is not being copied over Pinmemberjfaubey2000@yahoo.com9:42 21 Jul '05  
GeneralRe: XML File is not being copied over Pinmemberzero_joker7:27 20 Nov '06  
GeneralRe: XML File is not being copied over PinmemberAgha.net12:44 20 Sep '07  
Generaltiny improvement Pinmemberflair22:33 6 Apr '05  
GeneralRe: tiny improvement Pinmemberflair22:34 6 Apr '05  
GeneralRe: tiny improvement Pinmemberflair22:36 6 Apr '05  
GeneralSystem.NullReferenceException Pinmemberwannafly8:36 12 Apr '04  
GeneralAny chance you could port it to VB PinmemberGeovani6:56 5 Apr '04  
GeneralA misprint PinsussAlexey Mochalov21:47 21 Mar '04  
GeneralRe: A misprint Pinmemberpbrooks5:07 22 Mar '04  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 23 Mar 2004
Editor: Nishant Sivakumar
Copyright 2004 by pbrooks
Everything else Copyright © CodeProject, 1999-2009
Web11 | Advertise on the Code Project