Click here to Skip to main content
15,885,782 members
Articles / Programming Languages / C#

Form Placement Component

Rate me:
Please Sign up or sign in to vote.
3.91/5 (11 votes)
11 Nov 20036 min read 64.2K   1.4K   33  
A component class that restores a form's placement (location, size and state) to what it was when it was last closed.
<?xml version="1.0"?>
<doc>
    <assembly>
        <name>AMS.Profile</name>
    </assembly>
    <members>
        <member name="T:AMS.Profile.Config">
            <summary>
              Profile class that utilizes an XML-formatted .config file to retrieve and save its data. </summary>
            <remarks>
              Config files are used by Windows and Web apps to store application-specific configuration information.
              The System.Configuration namespace contains a variety of classes that may be used to retrieve the data
              from config files; however there is no provision for writing to such files.  The reason: they're only 
              meant to be read by the program, not written.  For this reason, I initially considered not writing a 
              Profile class for config files.  Instead, I created a separate <see cref="T:AMS.Profile.Xml"/> class that stores 
              profile data in its own XML format, meant for a separate file.  Although that is the preferred choice, 
              there may still be some developers who, for whatever reason, need a way to write to config files at 
              run-time.  If you're one of those, this class is for you.
              <para> 
              By default this class formats the data inside the config file as follows.  
              (Notice that XML elements cannot contain spaces so this class converts them to underscores.) </para> 
              <code> 
              &lt;configuration&gt;
                &lt;configSections&gt; 
                  &lt;sectionGroup name="profile"&gt;
                    &lt;section name="A_Section" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" /&gt;
                    &lt;section name="Another_Section" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" /&gt;
                  &lt;/sectionGroup&gt;
                &lt;/configSections&gt;
                &lt;appSettings&gt;
                  &lt;add key="App Entry" value="App Value" /&gt;
                &lt;/appSettings&gt;
                &lt;profile&gt;
                  &lt;A_Section&gt;
                    &lt;add key="An Entry" value="Some Value" /&gt;
                    &lt;add key="Another Entry" value="Another Value" /&gt;
                  &lt;/A_Section&gt;
                  &lt;Another_Section&gt;
                    &lt;add key="This is cool" value="True" /&gt;
                  &lt;/Another_Section&gt;
                &lt;/profile&gt;
              &lt;/configuration&gt;
              </code>
              <para> 
              If you wanted to read the value of "A_Section/An Entry" using the System.Configuration classes, you'd do it using the following code: </para>
              <code> 
              NameValueCollection section = (NameValueCollection)ConfigurationSettings.GetConfig("profile/A_Section");
              string value = section["An Entry"];
              </code>
              <para> 
              One thing to keep in mind is that .NET caches the config data as it reads it, so any subsequent 
              updates to it on the file will not be seen by the System.Configuration classes.
              The Config class, however, has no such problem since the data is read from the file every time.
              The equivalent of the above code would look like this: </para>
              <code> 
              Config config = new Config();
              string value = config.GetValue("A Section", "An Entry", null);
              </code> 
              <para> 
              As a bonus, you may use the Config class to access the "appSettings" section by clearing the
              GroupName property.  Here's an example: </para>
              <code> 
              Config config = new Config();
              config.GroupName = null;  // don't use a section group
              ...
              string value = config.GetValue("appSettings", "App Entry", null);
              config.SetValue("appSettings", "Update Date", DateTime.Today);
              </code>
              </remarks>
        </member>
        <member name="T:AMS.Profile.Profile">
            <summary>
              Abstract base class for all Profile classes in this namespace. </summary>
            <remarks>
              This class contains fields and methods which are common for all the derived Profile classes. 
              It fully implements most of the methods and properties of its base interfaces so that 
              derived classes don't have to. </remarks>
        </member>
        <member name="T:AMS.Profile.IProfile">
            <summary>
              Interface implemented by all profile classes in this namespace.
              It represents a normal profile. </summary>
            <remarks>
              This interface takes the members of IReadOnlyProfile (its base interface) and adds
              to it the rest of the members, which allow modifications to the profile.  
              Altogether, this represents a complete profile object. </remarks>
            <seealso cref="T:AMS.Profile.IReadOnlyProfile"/>
            <seealso cref="T:AMS.Profile.Profile"/>
        </member>
        <member name="T:AMS.Profile.IReadOnlyProfile">
            <summary>
              Base interface for all profile classes in this namespace.
              It represents a read-only profile. </summary>
            <seealso cref="T:AMS.Profile.IProfile"/>
            <seealso cref="T:AMS.Profile.Profile"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.GetValue(System.String,System.String)">
            <summary>
              Retrieves the value of an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <returns>
              The return value should be the entry's value, or null if the entry does not exist. </returns>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.GetValue(System.String,System.String,System.String)">
            <summary>
              Retrieves the value of an entry inside a section, or a default value if the entry does not exist. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <param name="defaultValue">
              The value to return if the entry (or section) does not exist. </param>
            <returns>
              The return value should be the entry's value converted to a string, or the given default value if the entry does not exist. </returns>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.GetValue(System.String,System.String,System.Int32)">
            <summary>
              Retrieves the value of an entry inside a section, or a default value if the entry does not exist. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <param name="defaultValue">
              The value to return if the entry (or section) does not exist. </param>
            <returns>
              The return value should be the entry's value converted to an integer.  If the value
              cannot be converted, the return value should be 0.  If the entry does not exist, the
              given default value should be returned. </returns>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.GetValue(System.String,System.String,System.Double)">
            <summary>
              Retrieves the value of an entry inside a section, or a default value if the entry does not exist. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <param name="defaultValue">
              The value to return if the entry (or section) does not exist. </param>
            <returns>
              The return value should be the entry's value converted to a double.  If the value
              cannot be converted, the return value should be 0.  If the entry does not exist, the
              given default value should be returned. </returns>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.GetValue(System.String,System.String,System.Boolean)">
            <summary>
              Retrieves the value of an entry inside a section, or a default value if the entry does not exist. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <param name="defaultValue">
              The value to return if the entry (or section) does not exist. </param>
            <returns>
              The return value should be the entry's value converted to a bool.  If the value
              cannot be converted, the return value should be <c>false</c>.  If the entry does not exist, the
              given default value should be returned. </returns>
            <remarks>
              Note: Boolean values are stored as "True" or "False". </remarks>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.HasEntry(System.String,System.String)">
            <summary>
              Determines if an entry exists inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry to be checked for existence. </param>
            <returns>
              If the entry exists inside the section, the return value should be true; otherwise false. </returns>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasSection(System.String)"/>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.GetEntryNames(System.String)"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.HasSection(System.String)">
            <summary>
              Determines if a section exists. </summary>
            <param name="section">
              The name of the section to be checked for existence. </param>
            <returns>
              If the section exists, the return value should be true; otherwise false. </returns>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasEntry(System.String,System.String)"/>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.GetSectionNames"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.GetEntryNames(System.String)">
            <summary>
              Retrieves the names of all the entries inside a section. </summary>
            <param name="section">
              The name of the section holding the entries. </param>
            <returns>
              If the section exists, the return value should be an array with the names of its entries; 
              otherwise it should be null. </returns>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasEntry(System.String,System.String)"/>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.GetSectionNames"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.GetSectionNames">
            <summary>
              Retrieves the names of all the sections. </summary>
            <returns>
              The return value should be an array with the names of all the sections. </returns>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.HasSection(System.String)"/>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.GetEntryNames(System.String)"/>
        </member>
        <member name="M:AMS.Profile.IReadOnlyProfile.GetDataSet">
            <summary>
              Retrieves a DataSet object containing every section, entry, and value in the profile. </summary>
            <returns>
              If the profile exists, the return value should be a DataSet object representing the profile; otherwise it's null. </returns>
            <remarks>
              The returned DataSet should be named using the <see cref="P:AMS.Profile.IReadOnlyProfile.Name"/> property.  
              It should contain one table for each section, and each entry should be represented by a column inside the table.
              Each table should contain only one row where the values will be stored corresponding to each column (entry). 
              <para>
              This method serves as a convenient way to extract the profile's data to this generic medium known as the DataSet.  
              This allows it to be moved to many different places, including a different type of profile object 
              (eg., INI to XML conversion). </para>
            </remarks>
        </member>
        <member name="P:AMS.Profile.IReadOnlyProfile.Name">
            <summary>
              Gets the name associated with the profile. </summary>
            <remarks>
              This should be the name of the file where the data is stored, or something equivalent. </remarks>
        </member>
        <member name="M:AMS.Profile.IProfile.SetValue(System.String,System.String,System.Object)">
            <summary>
              Sets the value for an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry where the value will be set. </param>
            <param name="value">
              The value to set. If it's null, the entry should be removed. </param>
            <remarks>
              This method should check the <see cref="P:AMS.Profile.IProfile.ReadOnly"/> property and throw an InvalidOperationException if it's true.
              It should also raise the <see cref="E:AMS.Profile.IProfile.Changing"/> and <see cref="E:AMS.Profile.IProfile.Changed"/> events before and after the value is set. </remarks>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.GetValue(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.IProfile.RemoveEntry(System.String,System.String)">
            <summary>
              Removes an entry from a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry to remove. </param>
            <remarks>
              This method should check the <see cref="P:AMS.Profile.IProfile.ReadOnly"/> property and throw an InvalidOperationException if it's true.
              It should also raise the <see cref="E:AMS.Profile.IProfile.Changing"/> and <see cref="E:AMS.Profile.IProfile.Changed"/> events before and after the entry is removed. </remarks>
            <seealso cref="M:AMS.Profile.IProfile.RemoveSection(System.String)"/>
        </member>
        <member name="M:AMS.Profile.IProfile.RemoveSection(System.String)">
            <summary>
              Removes a section. </summary>
            <param name="section">
              The name of the section to remove. </param>
            <remarks>
              This method should check the <see cref="P:AMS.Profile.IProfile.ReadOnly"/> property and throw an InvalidOperationException if it's true.
              It should also raise the <see cref="E:AMS.Profile.IProfile.Changing"/> and <see cref="E:AMS.Profile.IProfile.Changed"/> events before and after the section is removed. </remarks>
            <seealso cref="M:AMS.Profile.IProfile.RemoveEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.IProfile.SetDataSet(System.Data.DataSet)">
            <summary>
              Writes the data of every table from a DataSet into this profile. </summary>
            <param name="ds">
              The DataSet object containing the data to be set. </param>
            <remarks>
              Each table in the DataSet should be used to represent a section of the profile.  
              Each column of each table should represent an entry.  And for each column, the corresponding value
              of the first row is the value that should be passed to <see cref="M:AMS.Profile.IProfile.SetValue(System.String,System.String,System.Object)"/>.  
              <para>
              This method serves as a convenient way to take any data inside a generic DataSet and 
              write it to any of the available profiles. </para></remarks>
            <seealso cref="M:AMS.Profile.IReadOnlyProfile.GetDataSet"/>
        </member>
        <member name="M:AMS.Profile.IProfile.CloneReadOnly">
            <summary>
              Creates a copy of itself and makes it read-only. </summary>
            <returns>
              The return value should be a copy of itself as an IReadOnlyProfile object. </returns>
            <remarks>
              This method is meant as a convenient way to pass a read-only copy of the profile to methods 
              that are not allowed to modify it. </remarks>
            <seealso cref="P:AMS.Profile.IProfile.ReadOnly"/>
        </member>
        <member name="P:AMS.Profile.IProfile.Name">
            <summary>
              Gets or sets the name associated with the profile. </summary>
            <remarks>
              This should be the name of the file where the data is stored, or something equivalent.
              When setting this property, the <see cref="P:AMS.Profile.IProfile.ReadOnly"/> property should be checked and if true, an InvalidOperationException should be thrown.
              The <see cref="E:AMS.Profile.IProfile.Changing"/> and <see cref="E:AMS.Profile.IProfile.Changed"/> events should be raised before and after this property is changed. </remarks>
            <seealso cref="P:AMS.Profile.IProfile.DefaultName"/>
        </member>
        <member name="P:AMS.Profile.IProfile.DefaultName">
            <summary>
              Gets the name associated with the profile by default. </summary>
            <remarks>
              This is used to set the default Name of the profile and it is typically based on 
              the name of the executable plus some extension. </remarks>
            <seealso cref="P:AMS.Profile.IProfile.Name"/>
        </member>
        <member name="P:AMS.Profile.IProfile.ReadOnly">
            <summary>
              Gets or sets whether the profile is read-only or not. </summary>
            <remarks>
              A read-only profile should not allow any operations that alter sections,
              entries, or values, such as <see cref="M:AMS.Profile.IProfile.SetValue(System.String,System.String,System.Object)"/> or <see cref="M:AMS.Profile.IProfile.RemoveEntry(System.String,System.String)"/>.  
              Once a profile has been marked read-only, it should be allowed to go back; 
              attempting to do so should cause an InvalidOperationException to be thrown.
              The <see cref="E:AMS.Profile.IProfile.Changing"/> and <see cref="E:AMS.Profile.IProfile.Changed"/> events should be raised before 
              and after this property is changed. </remarks>
            <seealso cref="M:AMS.Profile.IProfile.CloneReadOnly"/>
            <seealso cref="T:AMS.Profile.IReadOnlyProfile"/>
        </member>
        <member name="E:AMS.Profile.IProfile.Changing">
            <summary>
              Event that should be raised just before the profile is to be changed to allow the change to be canceled. </summary>
            <seealso cref="E:AMS.Profile.IProfile.Changed"/>
        </member>
        <member name="E:AMS.Profile.IProfile.Changed">
            <summary>
              Event that should be raised right after the profile has been changed. </summary>
            <seealso cref="E:AMS.Profile.IProfile.Changing"/>
        </member>
        <member name="M:AMS.Profile.Profile.#ctor">
            <summary>
              Initializes a new instance of the Profile class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to <see cref="P:AMS.Profile.Profile.DefaultName"/>. </summary>
        </member>
        <member name="M:AMS.Profile.Profile.#ctor(System.String)">
            <summary>
              Initializes a new instance of the Profile class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to a value. </summary>
            <param name="name">
              The name to initialize the <see cref="P:AMS.Profile.Profile.Name"/> property with. </param>
        </member>
        <member name="M:AMS.Profile.Profile.#ctor(AMS.Profile.Profile)">
            <summary>
              Initializes a new instance of the Profile class based on another Profile object. </summary>
            <param name="profile">
              The Profile object whose properties and events are used to initialize the object being constructed. </param>
        </member>
        <member name="M:AMS.Profile.Profile.Clone">
            <summary>
              Retrieves a copy of itself. </summary>
            <returns>
              The return value is a copy of itself as an object. </returns>
            <remarks>
              This method needs to be implemented by derived classes. </remarks>
            <seealso cref="M:AMS.Profile.Profile.CloneReadOnly"/>
        </member>
        <member name="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)">
            <summary>
              Sets the value for an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry where the value will be set. </param>
            <param name="value">
              The value to set. If it's null, the entry should be removed. </param>
            <remarks>
              This method needs to be implemented by derived classes.  
              See <see cref="M:AMS.Profile.IProfile.SetValue(System.String,System.String,System.Object)">IProfile.SetValue</see> for additional remarks. </remarks>
            <seealso cref="M:AMS.Profile.Profile.GetValue(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.GetValue(System.String,System.String)">
            <summary>
              Retrieves the value of an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <returns>
              The return value is the entry's value, or null if the entry does not exist. </returns>
            <remarks>
              This method needs to be implemented by derived classes. </remarks>
            <seealso cref="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.GetValue(System.String,System.String,System.String)">
            <summary>
              Retrieves the string value of an entry inside a section, or a default value if the entry does not exist. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <param name="defaultValue">
              The value to return if the entry (or section) does not exist. </param>
            <returns>
              The return value is the entry's value converted to a string, or the given default value if the entry does not exist. </returns>
            <seealso cref="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.GetValue(System.String,System.String,System.Int32)">
            <summary>
              Retrieves the integer value of an entry inside a section, or a default value if the entry does not exist. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <param name="defaultValue">
              The value to return if the entry (or section) does not exist. </param>
            <returns>
              The return value is the entry's value converted to an integer.  If the value
              cannot be converted, the return value is 0.  If the entry does not exist, the
              given default value is returned. </returns>
            <seealso cref="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.GetValue(System.String,System.String,System.Double)">
            <summary>
              Retrieves the double value of an entry inside a section, or a default value if the entry does not exist. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <param name="defaultValue">
              The value to return if the entry (or section) does not exist. </param>
            <returns>
              The return value is the entry's value converted to a double.  If the value
              cannot be converted, the return value is 0.  If the entry does not exist, the
              given default value is returned. </returns>
            <seealso cref="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.GetValue(System.String,System.String,System.Boolean)">
            <summary>
              Retrieves the bool value of an entry inside a section, or a default value if the entry does not exist. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <param name="defaultValue">
              The value to return if the entry (or section) does not exist. </param>
            <returns>
              The return value is the entry's value converted to a bool.  If the value
              cannot be converted, the return value is <c>false</c>.  If the entry does not exist, the
              given default value is returned. </returns>
            <remarks>
              Note: Boolean values are stored as "True" or "False". </remarks>
            <seealso cref="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.HasEntry(System.String,System.String)">
            <summary>
              Determines if an entry exists inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry to be checked for existence. </param>
            <returns>
              If the entry exists inside the section, the return value is true; otherwise false. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasSection(System.String)"/>
            <seealso cref="M:AMS.Profile.Profile.GetEntryNames(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.HasSection(System.String)">
            <summary>
              Determines if a section exists. </summary>
            <param name="section">
              The name of the section to be checked for existence. </param>
            <returns>
              If the section exists, the return value is true; otherwise false. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
            <seealso cref="M:AMS.Profile.Profile.GetSectionNames"/>
        </member>
        <member name="M:AMS.Profile.Profile.RemoveEntry(System.String,System.String)">
            <summary>
              Removes an entry from a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry to remove. </param>
            <remarks>
              This method needs to be implemented by derived classes.  
              See <see cref="M:AMS.Profile.IProfile.RemoveEntry(System.String,System.String)">IProfile.RemoveEntry</see> for additional remarks. </remarks>
            <seealso cref="M:AMS.Profile.Profile.RemoveSection(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.RemoveSection(System.String)">
            <summary>
              Removes a section. </summary>
            <param name="section">
              The name of the section to remove. </param>
            <remarks>
              This method needs to be implemented by derived classes.  
              See <see cref="M:AMS.Profile.IProfile.RemoveSection(System.String)">IProfile.RemoveSection</see> for additional remarks. </remarks>
            <seealso cref="M:AMS.Profile.Profile.RemoveEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.GetEntryNames(System.String)">
            <summary>
              Retrieves the names of all the entries inside a section. </summary>
            <param name="section">
              The name of the section holding the entries. </param>
            <returns>
              If the section exists, the return value should be an array with the names of its entries; 
              otherwise null. </returns>
            <remarks>
              This method needs to be implemented by derived classes.  </remarks>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
            <seealso cref="M:AMS.Profile.Profile.GetSectionNames"/>
        </member>
        <member name="M:AMS.Profile.Profile.GetSectionNames">
            <summary>
              Retrieves the names of all the sections. </summary>
            <returns>
              The return value should be an array with the names of all the sections. </returns>
            <remarks>
              This method needs to be implemented by derived classes.  </remarks>
            <seealso cref="M:AMS.Profile.Profile.HasSection(System.String)"/>
            <seealso cref="M:AMS.Profile.Profile.GetEntryNames(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Profile.CloneReadOnly">
            <summary>
              Creates a copy of itself and makes it read-only. </summary>
            <returns>
              The return value is a copy of itself as a IReadOnlyProfile object. </returns>
            <remarks>
              This method serves as a convenient way to pass a read-only copy of the profile to methods 
              that are not allowed to modify it. </remarks>
            <seealso cref="P:AMS.Profile.Profile.ReadOnly"/>
        </member>
        <member name="M:AMS.Profile.Profile.GetDataSet">
            <summary>
              Retrieves a DataSet object containing every section, entry, and value in the profile. </summary>
            <returns>
              If the profile exists, the return value is a DataSet object representing the profile; otherwise it's null. </returns>
            <remarks>
              The returned DataSet will be named using the <see cref="P:AMS.Profile.Profile.Name"/> property.  
              It will contain one table for each section, and each entry will be represented by a column inside the table.
              Each table will contain only one row where the values will stored corresponding to each column (entry). 
              <para>
              This method serves as a convenient way to extract the profile's data to this generic medium known as the DataSet.  
              This allows it to be moved to many different places, including a different type of profile object 
              (eg., INI to XML conversion). </para>
            </remarks>
            <seealso cref="M:AMS.Profile.Profile.SetDataSet(System.Data.DataSet)"/>
        </member>
        <member name="M:AMS.Profile.Profile.SetDataSet(System.Data.DataSet)">
            <summary>
              Writes the data of every table from a DataSet into this profile. </summary>
            <param name="ds">
              The DataSet object containing the data to be set. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">ds is null. </exception>
            <remarks>
              Each table in the DataSet represents a section of the profile.  
              Each column of each table represents an entry.  And for each column, the corresponding value
              of the first row is the value to be passed to <see cref="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)"/>.  
              Note that only the first row is imported; additional rows are ignored.
              <para>
              This method serves as a convenient way to take any data inside a generic DataSet and 
              write it to any of the available profiles. </para></remarks>
            <seealso cref="M:AMS.Profile.Profile.GetDataSet"/>
        </member>
        <member name="M:AMS.Profile.Profile.VerifyAndAdjustSection(System.String@)">
            <summary>
              Verifies the given section name is not null and trims it. </summary>
            <param name="section">
              The section name to verify and adjust. </param>
            <exception cref="T:System.ArgumentNullException">section is null. </exception>
            <remarks>
              This method may be used by derived classes to make sure that a valid
              section name has been passed, and to make any necessary adjustments to it
              before passing it to the corresponding APIs. </remarks>
            <seealso cref="M:AMS.Profile.Profile.VerifyAndAdjustEntry(System.String@)"/>
        </member>
        <member name="M:AMS.Profile.Profile.VerifyAndAdjustEntry(System.String@)">
            <summary>
              Verifies the given entry name is not null and trims it. </summary>
            <param name="entry">
              The entry name to verify and adjust. </param>
            <remarks>
              This method may be used by derived classes to make sure that a valid
              entry name has been passed, and to make any necessary adjustments to it
              before passing it to the corresponding APIs. </remarks>
            <exception cref="T:System.ArgumentNullException">entry is null. </exception>
            <seealso cref="M:AMS.Profile.Profile.VerifyAndAdjustSection(System.String@)"/>
        </member>
        <member name="M:AMS.Profile.Profile.VerifyName">
            <summary>
              Verifies the Name property is not empty or null. </summary>
            <remarks>
              This method may be used by derived classes to make sure that the 
              APIs are working with a valid Name (file name) </remarks>
            <exception cref="T:System.InvalidOperationException">name is empty or null. </exception>
            <seealso cref="P:AMS.Profile.Profile.Name"/>
        </member>
        <member name="M:AMS.Profile.Profile.VerifyNotReadOnly">
            <summary>
              Verifies the ReadOnly property is not true. </summary>
            <remarks>
              This method may be used by derived classes as a convenient way to 
              validate that modifications to the profile can be made. </remarks>
            <exception cref="T:System.InvalidOperationException">ReadOnly is true. </exception>
            <seealso cref="P:AMS.Profile.Profile.ReadOnly"/>
        </member>
        <member name="M:AMS.Profile.Profile.RaiseChangeEvent(System.Boolean,AMS.Profile.ProfileChangeType,System.String,System.String,System.Object)">
            <summary>
              Raises either the Changing or Changed event. </summary>
            <param name="changing">
              If true, the Changing event is raised otherwise it's Changed. </param>
            <param name="changeType">
              The type of change being made. </param>
            <param name="section">
              The name of the section that was involved in the change or null if not applicable. </param>
            <param name="entry">
              The name of the entry that was involved in the change or null if not applicable. 
              If changeType is equal to Other, entry is the name of the property involved in the change.</param>
            <param name="value">
              The value that was changed or null if not applicable. </param>
            <returns>
              The return value is based on the event raised.  If the Changing event was raised, 
              the return value is the opposite of ProfileChangingArgs.Cancel; otherwise it's true.</returns>
            <remarks>
              This method may be used by derived classes as a convenient alternative to calling 
              OnChanging and OnChanged.  For example, a typical call to OnChanging would require
              four lines of code, which this method reduces to two. </remarks>
            <seealso cref="F:AMS.Profile.Profile.Changing"/>
            <seealso cref="F:AMS.Profile.Profile.Changed"/>
            <seealso cref="M:AMS.Profile.Profile.OnChanging(AMS.Profile.ProfileChangingArgs)"/>
            <seealso cref="M:AMS.Profile.Profile.OnChanged(AMS.Profile.ProfileChangedArgs)"/>
        </member>
        <member name="M:AMS.Profile.Profile.OnChanging(AMS.Profile.ProfileChangingArgs)">
            <summary>
              Raises the Changing event. </summary>
            <param name="e">
              The arguments object associated with the Changing event. </param>
            <remarks>
              This method should be invoked prior to making a change to the profile so that the
              Changing event is raised, giving a chance to the handlers to prevent the change from
              happening (by setting e.Cancel to true). This method calls each individual handler 
              associated with the Changing event and checks the resulting e.Cancel flag.  
              If it's true, it stops and does not call of any remaining handlers since the change 
              needs to be prevented anyway. </remarks>
            <seealso cref="F:AMS.Profile.Profile.Changing"/>
            <seealso cref="M:AMS.Profile.Profile.OnChanged(AMS.Profile.ProfileChangedArgs)"/>
        </member>
        <member name="M:AMS.Profile.Profile.OnChanged(AMS.Profile.ProfileChangedArgs)">
            <summary>
              Raises the Changed event. </summary>
            <param name="e">
              The arguments object associated with the Changed event. </param>
            <remarks>
              This method should be invoked after a change to the profile has been made so that the
              Changed event is raised, giving a chance to the handlers to be notified of the change. </remarks>
            <seealso cref="F:AMS.Profile.Profile.Changed"/>
            <seealso cref="M:AMS.Profile.Profile.OnChanging(AMS.Profile.ProfileChangingArgs)"/>
        </member>
        <member name="M:AMS.Profile.Profile.Test(System.Boolean)">
            <summary>
              Runs a test to verify this object is working as expected. </summary>
            <param name="cleanup">
              If true, the modifications made to the profile are cleaned up as the final part of the test. 
              If false, the modifications are not removed thus allowing them to be examined. </param>
            <remarks>
              This method tests most of the funcionality of a profile object to ensure
              accuracy and consistency.  All profile classes should behave identically when calling this method. 
              If the test fails, an Exception is raised detailing the problem.  </remarks>
            <exception cref="T:System.Exception">The test failed. </exception>
        </member>
        <member name="E:AMS.Profile.Profile.Changing">
            <summary>
              Event used to notify that the profile is about to be changed. </summary>
            <seealso cref="F:AMS.Profile.Profile.Changed"/>
        </member>
        <member name="E:AMS.Profile.Profile.Changed">
            <summary>
              Event used to notify that the profile has been changed. </summary>
            <seealso cref="F:AMS.Profile.Profile.Changing"/>
        </member>
        <member name="P:AMS.Profile.Profile.Name">
            <summary>
              Gets or sets the name associated with the profile. </summary>
            <exception cref="T:System.InvalidOperationException">Setting this property if ReadOnly is true. </exception>
            <remarks>
              This is usually the name of the file where the data is stored. 
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before changing this property.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this property 
              returns immediately without being changing.  After the property is changed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="P:AMS.Profile.Profile.DefaultName"/>
        </member>
        <member name="P:AMS.Profile.Profile.ReadOnly">
            <summary>
              Gets or sets whether the profile is read-only or not. </summary>
            <exception cref="T:System.InvalidOperationException">Setting this property if it's already true. </exception>
            <remarks>
              A read-only profile does not allow any operations that alter sections,
              entries, or values, such as <see cref="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)"/> or <see cref="M:AMS.Profile.Profile.RemoveEntry(System.String,System.String)"/>.  
              Once a profile has been marked read-only, it may no longer go back; 
              attempting to do so causes an InvalidOperationException to be thrown.
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before changing this property.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this property 
              returns immediately without being changing.  After the property is changed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Profile.CloneReadOnly"/>
            <seealso cref="T:AMS.Profile.IReadOnlyProfile"/>
        </member>
        <member name="P:AMS.Profile.Profile.DefaultName">
            <summary>
              Gets the name associated with the profile by default. </summary>
            <remarks>
              This property needs to be implemented by derived classes.  
              See <see cref="P:AMS.Profile.IProfile.DefaultName">IProfile.DefaultName</see> for additional remarks. </remarks>
            <seealso cref="P:AMS.Profile.Profile.Name"/>
        </member>
        <member name="M:AMS.Profile.Config.#ctor">
            <summary>
              Initializes a new instance of the Config class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to <see cref="P:AMS.Profile.Profile.DefaultName"/>. </summary>
        </member>
        <member name="M:AMS.Profile.Config.#ctor(System.String)">
            <summary>
              Initializes a new instance of the Config class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to the given file name. </summary>
            <param name="fileName">
              The name of the Config file to initialize the <see cref="P:AMS.Profile.Profile.Name"/> property with. </param>
        </member>
        <member name="M:AMS.Profile.Config.#ctor(AMS.Profile.Config)">
            <summary>
              Initializes a new instance of the Config class based on another Config object. </summary>
            <param name="config">
              The Config object whose properties and events are used to initialize the object being constructed. </param>
        </member>
        <member name="M:AMS.Profile.Config.Clone">
            <summary>
              Retrieves a copy of itself. </summary>
            <returns>
              The return value is a copy of itself as an object. </returns>
            <seealso cref="M:AMS.Profile.Profile.CloneReadOnly"/>
        </member>
        <member name="M:AMS.Profile.Config.GetXmlDocument">
            <summary>
              Retrieves an XMLDocument object based on the XML file (Name). </summary>
            <returns>
              The return value is the XMLDocument object based on the file, 
              or null if the file does not exist. </returns>
        </member>
        <member name="M:AMS.Profile.Config.IsAppSettings(System.String)">
            <summary>
              Retrieves whether we don't have a valid GroupName and a given section is 
              equal to "appSettings". </summary>
            <remarks>
              This method helps us determine whether we need to deal with the "configuration\configSections" element. </remarks>
        </member>
        <member name="M:AMS.Profile.Config.VerifyAndAdjustSection(System.String@)">
            <summary>
              Verifies the given section name is not null and trims it. </summary>
            <param name="section">
              The section name to verify and adjust. </param>
            <exception cref="T:System.ArgumentNullException">section is null. </exception>
            <remarks>
              This method first calls <see cref="M:AMS.Profile.Profile.VerifyAndAdjustSection(System.String@)">Profile.VerifyAndAdjustSection</see> 
              and then replaces any spaces in the section with underscores.  This is needed 
              because XML element names may not contain spaces.  </remarks>
            <seealso cref="M:AMS.Profile.Profile.VerifyAndAdjustEntry(System.String@)"/>
        </member>
        <member name="M:AMS.Profile.Config.SetValue(System.String,System.String,System.Object)">
            <summary>
              Sets the value for an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry where the value will be set. </param>
            <param name="value">
              The value to set. If it's null, the entry is removed. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.Name"/> is null or empty. </exception>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <remarks>
              If the Config file does not exist, it is created.
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before setting the value.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without setting the value.  After the value has been set, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Config.GetValue(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Config.GetValue(System.String,System.String)">
            <summary>
              Retrieves the value of an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <returns>
              The return value is the entry's value, or null if the entry does not exist. </returns>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <seealso cref="M:AMS.Profile.Config.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Config.RemoveEntry(System.String,System.String)">
            <summary>
              Removes an entry from a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry to remove. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <remarks>
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before removing the entry.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without removing the entry.  After the entry has been removed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Config.RemoveSection(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Config.RemoveSection(System.String)">
            <summary>
              Removes a section. </summary>
            <param name="section">
              The name of the section to remove. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">section is null. </exception>
            <remarks>
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before removing the section.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without removing the section.  After the section has been removed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Config.RemoveEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Config.GetEntryNames(System.String)">
            <summary>
              Retrieves the names of all the entries inside a section. </summary>
            <param name="section">
              The name of the section holding the entries. </param>
            <returns>
              If the section exists, the return value is an array with the names of its entries; 
              otherwise it's null. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
            <seealso cref="M:AMS.Profile.Config.GetSectionNames"/>
        </member>
        <member name="M:AMS.Profile.Config.GetSectionNames">
            <summary>
              Retrieves the names of all the sections. </summary>
            <returns>
              If the Config file exists, the return value is an array with the names of all the sections;
              otherwise it's null. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasSection(System.String)"/>
            <seealso cref="M:AMS.Profile.Config.GetEntryNames(System.String)"/>
        </member>
        <member name="P:AMS.Profile.Config.DefaultName">
            <summary>
              Gets the default name for the Config file. </summary>
            <remarks>
              This returns the name of the executable plus .config ("program.exe.config").
              This property is used to set the <see cref="P:AMS.Profile.Profile.Name"/> property inside the default constructor.</remarks>
        </member>
        <member name="P:AMS.Profile.Config.GroupName">
            <summary>
              Gets or sets the name of the element under which all sections should be located. </summary>
            <exception cref="T:System.InvalidOperationException">Setting this property if <see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <remarks>
              By default this property is set to "profile".  This means that the sections come as
              descendants of "configuration\profile".  However, this property may be set to null so that
              all sections can be placed directly under "configuration".  This is useful for reading/writing
              the popular "appSettings" section, which may also be retrieved via the System.Configuration.ConfigurationSettings.AppSettings property.
              <para>The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before changing this property.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without changing this property.  After the property has been changed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised.</para> </remarks>
        </member>
        <member name="P:AMS.Profile.Config.HasGroupName">
            <summary>
              Gets whether we have a valid GroupName. </summary>
        </member>
        <member name="P:AMS.Profile.Config.GroupNameSlash">
            <summary>
              Gets the name of the GroupName plus a slash or an empty string is HasGroupName is false. </summary>
            <remarks>
              This property helps us when retrieving sections. </remarks>
        </member>
        <member name="T:AMS.Profile.ProfileChangeType">
            <summary>
              Types of changes that may be made to a Profile object. </summary>
            <remarks>
              A variable of this type is passed inside the ProfileChangedArgs object 
              for the <see cref="F:AMS.Profile.Profile.Changing"/> and <see cref="F:AMS.Profile.Profile.Changed"/> events </remarks>
            <seealso cref="T:AMS.Profile.ProfileChangedArgs"/>
        </member>
        <member name="F:AMS.Profile.ProfileChangeType.Name">
            <summary> 
              The change refers to the <see cref="P:AMS.Profile.Profile.Name"/> property. </summary>		
            <remarks> 
              <see cref="P:AMS.Profile.ProfileChangedArgs.Value"/> will contain the new name. </remarks>
        </member>
        <member name="F:AMS.Profile.ProfileChangeType.ReadOnly">
            <summary> 
              The change refers to the <see cref="P:AMS.Profile.Profile.ReadOnly"/> property. </summary>		
            <remarks> 
              <see cref="P:AMS.Profile.ProfileChangedArgs.Value"/> will be true. </remarks>
        </member>
        <member name="F:AMS.Profile.ProfileChangeType.SetValue">
            <summary> 
              The change refers to the <see cref="M:AMS.Profile.Profile.SetValue(System.String,System.String,System.Object)"/> method. </summary>		
            <remarks> 
              <see cref="P:AMS.Profile.ProfileChangedArgs.Section"/>,  <see cref="P:AMS.Profile.ProfileChangedArgs.Entry"/>, 
              and <see cref="P:AMS.Profile.ProfileChangedArgs.Value"/> will be set to the same values passed 
              to the SetValue method. </remarks>
        </member>
        <member name="F:AMS.Profile.ProfileChangeType.RemoveEntry">
            <summary> 
              The change refers to the <see cref="M:AMS.Profile.Profile.RemoveEntry(System.String,System.String)"/> method. </summary>		
            <remarks> 
              <see cref="P:AMS.Profile.ProfileChangedArgs.Section"/> and <see cref="P:AMS.Profile.ProfileChangedArgs.Entry"/> 
              will be set to the same values passed to the RemoveEntry method. </remarks>
        </member>
        <member name="F:AMS.Profile.ProfileChangeType.RemoveSection">
            <summary> 
              The change refers to the <see cref="M:AMS.Profile.Profile.RemoveSection(System.String)"/> method. </summary>		
            <remarks> 
              <see cref="P:AMS.Profile.ProfileChangedArgs.Section"/> will contain the name of the section passed to the RemoveSection method. </remarks>
        </member>
        <member name="F:AMS.Profile.ProfileChangeType.Other">
            <summary> 
              The change refers to method or property specific to the Profile class. </summary>		
            <remarks> 
              <see cref="P:AMS.Profile.ProfileChangedArgs.Entry"/> will contain the name of the  method or property.
              <see cref="P:AMS.Profile.ProfileChangedArgs.Value"/> will contain the new value. </remarks>
        </member>
        <member name="T:AMS.Profile.ProfileChangedArgs">
            <summary>
              EventArgs class to be passed as the second parameter of a <see cref="F:AMS.Profile.Profile.Changed"/> event handler. </summary>
            <remarks>
              This class provides all the information relevant to the change made to the Profile.
              It is also used as a convenient base class for the ProfileChangingArgs class which is passed 
              as the second parameter of the <see cref="F:AMS.Profile.Profile.Changing"/> event handler. </remarks>
            <seealso cref="T:AMS.Profile.ProfileChangingArgs"/>
        </member>
        <member name="M:AMS.Profile.ProfileChangedArgs.#ctor(AMS.Profile.ProfileChangeType,System.String,System.String,System.Object)">
            <summary>
              Initializes a new instance of the ProfileChangedArgs class by initializing all of its properties. </summary>
            <param name="changeType">
              The type of change made to the profile. </param>
            <param name="section">
              The name of the section involved in the change or null. </param>
            <param name="entry">
              The name of the entry involved in the change, or if changeType is set to Other, the name of the method/property that was changed. </param>
            <param name="value">
              The new value for the entry or method/property, based on the value of changeType. </param>
            <seealso cref="T:AMS.Profile.ProfileChangeType"/>
        </member>
        <member name="P:AMS.Profile.ProfileChangedArgs.ChangeType">
            <summary>
              Gets the type of change that raised the event. </summary>
        </member>
        <member name="P:AMS.Profile.ProfileChangedArgs.Section">
            <summary>
              Gets the name of the section involved in the change, or null if not applicable. </summary>
        </member>
        <member name="P:AMS.Profile.ProfileChangedArgs.Entry">
            <summary>
              Gets the name of the entry involved in the change, or null if not applicable. </summary>
            <remarks> 
              If <see cref="P:AMS.Profile.ProfileChangedArgs.ChangeType"/> is set to Other, this property holds the name of the 
              method/property that was changed. </remarks>
        </member>
        <member name="P:AMS.Profile.ProfileChangedArgs.Value">
            <summary>
              Gets the new value for the entry or method/property, based on the value of <see cref="P:AMS.Profile.ProfileChangedArgs.ChangeType"/>. </summary>
        </member>
        <member name="T:AMS.Profile.ProfileChangingArgs">
            <summary>
              EventArgs class to be passed as the second parameter of a <see cref="F:AMS.Profile.Profile.Changing"/> event handler. </summary>
            <remarks>
              This class provides all the information relevant to the change about to be made to the Profile.
              Besides the properties of ProfileChangedArgs, it adds the Cancel property which allows the 
              event handler to prevent the change from happening. </remarks>
            <seealso cref="T:AMS.Profile.ProfileChangedArgs"/>
        </member>
        <member name="M:AMS.Profile.ProfileChangingArgs.#ctor(AMS.Profile.ProfileChangeType,System.String,System.String,System.Object)">
            <summary>
              Initializes a new instance of the ProfileChangingArgs class by initializing all of its properties. </summary>
            <param name="changeType">
              The type of change to be made to the profile. </param>
            <param name="section">
              The name of the section involved in the change or null. </param>
            <param name="entry">
              The name of the entry involved in the change, or if changeType is set to Other, the name of the method/property that was changed. </param>
            <param name="value">
              The new value for the entry or method/property, based on the value of changeType. </param>
            <seealso cref="T:AMS.Profile.ProfileChangeType"/>
        </member>
        <member name="P:AMS.Profile.ProfileChangingArgs.Cancel">
            <summary>
              Gets or sets whether the change about to the made should be canceled or not. </summary>
            <remarks> 
              By default this property is set to false, meaning that the change is allowed.  </remarks>
        </member>
        <member name="T:AMS.Profile.ProfileChangingHandler">
            <summary>
              Definition of the <see cref="F:AMS.Profile.Profile.Changing"/> event handler. </summary>
            <remarks>
              This definition complies with the .NET Framework's standard for event handlers.
              The sender is always set to the Profile object that raised the event. </remarks>
        </member>
        <member name="T:AMS.Profile.ProfileChangedHandler">
            <summary>
              Definition of the <see cref="F:AMS.Profile.Profile.Changed"/> event handler. </summary>
            <remarks>
              This definition complies with the .NET Framework's standard for event handlers.
              The sender is always set to the Profile object that raised the event. </remarks>
        </member>
        <member name="T:AMS.Profile.Ini">
            <summary>
              Profile class that utilizes an INI-formatted file to retrieve and save its data. </summary>
            <remarks>
              This class works with INI files, which use a simple two-dimensional text format of sections
              and entries to organize their data.  Here's a sample of the format:
              <code>
              [A Section]
              An Entry=Some Value
              Another Entry=Another Value
                
              [Another Section]
              This is cool=True
              </code></remarks>
        </member>
        <member name="M:AMS.Profile.Ini.#ctor">
            <summary>
              Initializes a new instance of the Ini class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to <see cref="P:AMS.Profile.Profile.DefaultName"/>. </summary>
        </member>
        <member name="M:AMS.Profile.Ini.#ctor(System.String)">
            <summary>
              Initializes a new instance of the Ini class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to the given file name. </summary>
            <param name="fileName">
              The name of the INI file to initialize the <see cref="P:AMS.Profile.Profile.Name"/> property with. </param>
        </member>
        <member name="M:AMS.Profile.Ini.#ctor(AMS.Profile.Ini)">
            <summary>
              Initializes a new instance of the Ini class based on another Ini object. </summary>
            <param name="ini">
              The Ini object whose properties and events are used to initialize the object being constructed. </param>
        </member>
        <member name="M:AMS.Profile.Ini.Clone">
            <summary>
              Retrieves a copy of itself. </summary>
            <returns>
              The return value is a copy of itself as an object. </returns>
            <seealso cref="M:AMS.Profile.Profile.CloneReadOnly"/>
        </member>
        <member name="M:AMS.Profile.Ini.SetValue(System.String,System.String,System.Object)">
            <summary>
              Sets the value for an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry where the value will be set. </param>
            <param name="value">
              The value to set. If it's null, the entry is removed. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.Name"/> is null or empty. </exception>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <remarks>
              If the INI file does not exist, it is created.
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before setting the value.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without setting the value.  After the value has been set, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Ini.GetValue(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Ini.GetValue(System.String,System.String)">
            <summary>
              Retrieves the value of an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <returns>
              The return value is the entry's value, or null if the entry does not exist. </returns>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <seealso cref="M:AMS.Profile.Ini.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Ini.RemoveEntry(System.String,System.String)">
            <summary>
              Removes an entry from a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry to remove. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <remarks>
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before removing the entry.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without removing the entry.  After the entry has been removed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Ini.RemoveSection(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Ini.RemoveSection(System.String)">
            <summary>
              Removes a section. </summary>
            <param name="section">
              The name of the section to remove. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">section is null. </exception>
            <remarks>
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before removing the section.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without removing the section.  After the section has been removed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Ini.RemoveEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Ini.GetEntryNames(System.String)">
            <summary>
              Retrieves the names of all the entries inside a section. </summary>
            <param name="section">
              The name of the section holding the entries. </param>
            <returns>
              If the section exists, the return value is an array with the names of its entries; 
              otherwise it's null. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
            <seealso cref="M:AMS.Profile.Ini.GetSectionNames"/>
        </member>
        <member name="M:AMS.Profile.Ini.GetSectionNames">
            <summary>
              Retrieves the names of all the sections. </summary>
            <returns>
              If the INI file exists, the return value is an array with the names of all the sections;
              otherwise it's null. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasSection(System.String)"/>
            <seealso cref="M:AMS.Profile.Ini.GetEntryNames(System.String)"/>
        </member>
        <member name="P:AMS.Profile.Ini.DefaultName">
            <summary>
              Gets the default name for the INI file. </summary>
            <remarks>
              This returns the name of the executable plus .ini ("program.exe.ini").
              This property is used to set the <see cref="P:AMS.Profile.Profile.Name"/> property inside the default constructor.</remarks>
        </member>
        <member name="T:AMS.Profile.Registry">
            <summary>
              Profile class that utilizes the Windows Registry to retrieve and save its data. </summary>
            <remarks>
              By default class this class uses the HKEY_CURRENT_USER root key,
              and sets its default subkey based on the CompanyName and ProductName properties of
              the Application object.  For the Demo application, the Company name is set to
              "AMS" and the product is "ProfileDemo".  So the entire path looks like this:
            
              <code>HKEY_CURRENT_USER\Software\AMS\ProfileDemo</code>
            
              Each section is then created as a subkey of this location on the registry. </remarks>
        </member>
        <member name="M:AMS.Profile.Registry.#ctor">
            <summary>
              Initializes a new instance of the Registry class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to <see cref="P:AMS.Profile.Profile.DefaultName"/>. </summary>
        </member>
        <member name="M:AMS.Profile.Registry.#ctor(Microsoft.Win32.RegistryKey,System.String)">
            <summary>
              Initializes a new instance of the Registry class by setting the <see cref="P:AMS.Profile.Registry.RootKey"/> and/or <see cref="P:AMS.Profile.Profile.Name"/>. </summary>
            <param name="rootKey">
              If not null, this is used to initialize the <see cref="P:AMS.Profile.Registry.RootKey"/> property. </param>
            <param name="subKeyName">
              If not null, this is used to initialize the <see cref="P:AMS.Profile.Profile.Name"/> property. </param>
        </member>
        <member name="M:AMS.Profile.Registry.#ctor(AMS.Profile.Registry)">
            <summary>
              Initializes a new instance of the Registry class based on another Registry object. </summary>
            <param name="reg">
              The Registry object whose properties and events are used to initialize the object being constructed. </param>
        </member>
        <member name="M:AMS.Profile.Registry.Clone">
            <summary>
              Retrieves a copy of itself. </summary>
            <returns>
              The return value is a copy of itself as an object. </returns>
            <seealso cref="M:AMS.Profile.Profile.CloneReadOnly"/>
        </member>
        <member name="M:AMS.Profile.Registry.GetSubKey(System.String,System.Boolean)">
            <summary>
              Retrieves a RegistryKey object for the given section. </summary>
            <param name="section">
              The name of the section to retrieve the key for. </param>
            <param name="create">
              If true, the key is created; otherwise it is just opened. </param>
            <returns>
              The return value is a RegistryKey object representing the section's subkey. </returns>
            <remarks>
              This method returns a key for the equivalent path: <see cref="P:AMS.Profile.Registry.RootKey"/> + "\\" + <see cref="P:AMS.Profile.Profile.Name"/> + "\\" + section </remarks>
        </member>
        <member name="M:AMS.Profile.Registry.SetValue(System.String,System.String,System.Object)">
            <summary>
              Sets the value for an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry where the value will be set. </param>
            <param name="value">
              The value to set. If it's null, the entry is removed. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.Name"/> is null or empty. </exception>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <remarks>
              If either the subkey, section, or entry does not exist, it is created.
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before setting the value.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without setting the value.  After the value has been set, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Registry.GetValue(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Registry.GetValue(System.String,System.String)">
            <summary>
              Retrieves the value of an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <returns>
              The return value is the entry's value, or null if the entry does not exist. </returns>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <seealso cref="M:AMS.Profile.Registry.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Registry.RemoveEntry(System.String,System.String)">
            <summary>
              Removes an entry from a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry to remove. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <remarks>
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before removing the entry.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without removing the entry.  After the entry has been removed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Registry.RemoveSection(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Registry.RemoveSection(System.String)">
            <summary>
              Removes a section. </summary>
            <param name="section">
              The name of the section to remove. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">section is null. </exception>
            <remarks>
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before removing the section.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without removing the section.  After the section has been removed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Registry.RemoveEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Registry.GetEntryNames(System.String)">
            <summary>
              Retrieves the names of all the entries inside a section. </summary>
            <param name="section">
              The name of the section holding the entries. </param>
            <returns>
              If the section exists, the return value is an array with the names of its entries; 
              otherwise it's null. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
            <seealso cref="M:AMS.Profile.Registry.GetSectionNames"/>
        </member>
        <member name="M:AMS.Profile.Registry.GetSectionNames">
            <summary>
              Retrieves the names of all the sections. </summary>
            <returns>
              If the XML file exists, the return value is an array with the names of all the sections;
              otherwise it's null. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasSection(System.String)"/>
            <seealso cref="M:AMS.Profile.Registry.GetEntryNames(System.String)"/>
        </member>
        <member name="P:AMS.Profile.Registry.DefaultName">
            <summary>
              Gets the default name sub-key registry path. </summary>
            <exception cref="T:System.InvalidOperationException">Application.CompanyName or Application.ProductName are empty.</exception>
            <remarks>
              This is set to "Software\\" + Application.CompanyName + "\\" + Application.ProductName. </remarks>
        </member>
        <member name="P:AMS.Profile.Registry.RootKey">
            <summary>
              Gets or sets the root RegistryKey object to use as the base for the <see cref="P:AMS.Profile.Profile.Name"/>. </summary>
            <exception cref="T:System.InvalidOperationException">Setting this property if <see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <remarks>
              By default, this property is set to Microsoft.Win32.Registry.CurrentUser. 
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before changing this property.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without changing this property.  After the property has been changed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
        </member>
        <member name="T:AMS.Profile.Xml">
            <summary>
              Profile class that utilizes an XML file to retrieve and save its data. </summary>
            <remarks>
              This class works with XML files, which are text files that store their data using XML. 
              Since the format of XML is very flexible, I had to decide how to best organize the data
              using the section/entry paradigm.  After considering a couple of possibilities, 
              I decided that the format below would be preferrable, since it allows section and 
              entry names to contain spaces.  It also looks cleaner and more consistent than if I had
              used the section and entry names themselves to name the elements.
              <para>
              Here's an illustration of the format: </para>
              <code>
              &lt;?xml version="1.0" encoding="utf-8"?&gt;
              &lt;profile&gt;
                &lt;section name="A Section"&gt;
                  &lt;entry name="An Entry"&gt;Some Value&lt;/entry&gt;
                  &lt;entry name="Another Entry"&gt;Another Value&lt;/entry&gt;
                &lt;/section&gt;
                &lt;section name="Another Section"&gt;
                  &lt;entry name="This is cool"&gt;True&lt;/entry&gt;
                &lt;/section&gt;
              &lt;/profile&gt;
              </code></remarks>
        </member>
        <member name="M:AMS.Profile.Xml.#ctor">
            <summary>
              Initializes a new instance of the Xml class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to <see cref="P:AMS.Profile.Profile.DefaultName"/>. </summary>
        </member>
        <member name="M:AMS.Profile.Xml.#ctor(System.String)">
            <summary>
              Initializes a new instance of the Xml class by setting the <see cref="P:AMS.Profile.Profile.Name"/> to the given file name. </summary>
            <param name="fileName">
              The name of the XML file to initialize the <see cref="P:AMS.Profile.Profile.Name"/> property with. </param>
        </member>
        <member name="M:AMS.Profile.Xml.#ctor(AMS.Profile.Xml)">
            <summary>
              Initializes a new instance of the Xml class based on another Xml object. </summary>
            <param name="xml">
              The Xml object whose properties and events are used to initialize the object being constructed. </param>
        </member>
        <member name="M:AMS.Profile.Xml.Clone">
            <summary>
              Retrieves a copy of itself. </summary>
            <returns>
              The return value is a copy of itself as an object. </returns>
            <seealso cref="M:AMS.Profile.Profile.CloneReadOnly"/>
        </member>
        <member name="M:AMS.Profile.Xml.GetXmlDocument">
            <summary>
              Retrieves an XMLDocument object based on the XML file (Name). </summary>
            <returns>
              The return value is the XMLDocument object based on the file, 
              or null if the file does not exist. </returns>
        </member>
        <member name="M:AMS.Profile.Xml.GetSectionsPath(System.String)">
            <summary>
              Retrieves the XPath string used for retrieving a section from the XML file. </summary>
            <returns>
              An XPath string. </returns>
            <seealso cref="M:AMS.Profile.Xml.GetEntryPath(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Xml.GetEntryPath(System.String)">
            <summary>
              Retrieves the XPath string used for retrieving an entry from the XML file. </summary>
            <returns>
              An XPath string. </returns>
            <seealso cref="M:AMS.Profile.Xml.GetSectionsPath(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Xml.SetValue(System.String,System.String,System.Object)">
            <summary>
              Sets the value for an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry where the value will be set. </param>
            <param name="value">
              The value to set. If it's null, the entry is removed. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.Name"/> is null or empty. </exception>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <remarks>
              If the XML file does not exist, it is created.
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before setting the value.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without setting the value.  After the value has been set, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Xml.GetValue(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Xml.GetValue(System.String,System.String)">
            <summary>
              Retrieves the value of an entry inside a section. </summary>
            <param name="section">
              The name of the section that holds the entry with the value. </param>
            <param name="entry">
              The name of the entry where the value is stored. </param>
            <returns>
              The return value is the entry's value, or null if the entry does not exist. </returns>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <seealso cref="M:AMS.Profile.Xml.SetValue(System.String,System.String,System.Object)"/>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Xml.RemoveEntry(System.String,System.String)">
            <summary>
              Removes an entry from a section. </summary>
            <param name="section">
              The name of the section that holds the entry. </param>
            <param name="entry">
              The name of the entry to remove. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">Either section or entry is null. </exception>
            <remarks>
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before removing the entry.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without removing the entry.  After the entry has been removed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Xml.RemoveSection(System.String)"/>
        </member>
        <member name="M:AMS.Profile.Xml.RemoveSection(System.String)">
            <summary>
              Removes a section. </summary>
            <param name="section">
              The name of the section to remove. </param>
            <exception cref="T:System.InvalidOperationException"><see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <exception cref="T:System.ArgumentNullException">section is null. </exception>
            <remarks>
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before removing the section.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without removing the section.  After the section has been removed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
            <seealso cref="M:AMS.Profile.Xml.RemoveEntry(System.String,System.String)"/>
        </member>
        <member name="M:AMS.Profile.Xml.GetEntryNames(System.String)">
            <summary>
              Retrieves the names of all the entries inside a section. </summary>
            <param name="section">
              The name of the section holding the entries. </param>
            <returns>
              If the section exists, the return value is an array with the names of its entries; 
              otherwise it's null. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasEntry(System.String,System.String)"/>
            <seealso cref="M:AMS.Profile.Xml.GetSectionNames"/>
        </member>
        <member name="M:AMS.Profile.Xml.GetSectionNames">
            <summary>
              Retrieves the names of all the sections. </summary>
            <returns>
              If the XML file exists, the return value is an array with the names of all the sections;
              otherwise it's null. </returns>
            <seealso cref="M:AMS.Profile.Profile.HasSection(System.String)"/>
            <seealso cref="M:AMS.Profile.Xml.GetEntryNames(System.String)"/>
        </member>
        <member name="P:AMS.Profile.Xml.DefaultName">
            <summary>
              Gets the default name for the XML file. </summary>
            <remarks>
              This returns the name of the executable plus .xml ("program.exe.xml").
              This property is used to set the <see cref="P:AMS.Profile.Profile.Name"/> property inside the default constructor.</remarks>
        </member>
        <member name="P:AMS.Profile.Xml.RootName">
            <summary>
              Gets or sets the name of the root element, to be used if the file is created. </summary>
            <exception cref="T:System.InvalidOperationException">Setting this property if <see cref="P:AMS.Profile.Profile.ReadOnly"/> is true. </exception>
            <remarks>
              By default this property is set to "profile", but it is only used when the file 
              is not found and needs to be created to write the value. 
              If the file exists, the name of the root element inside the file is ignored. 
              The <see cref="F:AMS.Profile.Profile.Changing"/> event is raised before changing this property.  
              If its <see cref="P:AMS.Profile.ProfileChangingArgs.Cancel"/> property is set to true, this method 
              returns immediately without changing this property.  After the property has been changed, 
              the <see cref="F:AMS.Profile.Profile.Changed"/> event is raised. </remarks>
        </member>
    </members>
</doc>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

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


Written By
Web Developer
United States United States
I've done extensive work with C++, MFC, COM, and ATL on the Windows side. On the Web side, I've worked with VB, ASP, JavaScript, and COM+. I've also been involved with server-side Java, which includes JSP, Servlets, and EJB, and more recently with ASP.NET/C#.

Comments and Discussions