如何在Windows移动应用程序中存储字符串值并在以后检索它

时间:2013-08-20 14:19:44

标签: c# windows-mobile

我正在使用带有C#的Visual Studio 2008(.NET Framework 3.0)开发Windows Mobile 6.0应用程序,我想从Form2中的comboBox保存所选值,并在关闭并重新打开后再检索它。在Form1中申请。

3 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一点。我更喜欢在.xml文件中保存此值(与您要保存的任何其他值一起)。当您在表单上执行“确定”按钮时,它会将值保存到该值。打开表单后,它将打开并读取.xml文件,根据需要确定值。查看此link有关如何读取和写入.xml文件的信息。

答案 1 :(得分:0)

首先,Windows Mobile没有Compact Framework 3.0版。你是关于Windows Phone 7还是8?

对于Windows Mobile(Compact Framework 2.0或3.5): 如果只想存储/检索一个值,只需使用注册表来保存和恢复该值。

using System;
using System.Text;
using Microsoft.Win32;

namespace StoreString
{
    class RegStoreClass:IDisposable
    {
        RegistryKey m_regKey = null;
        String m_AppName="";
        String m_Value = "";
        public String sValue{
            get{
                readReg();
                return m_Value;
            }
            set{
                m_Value=value;
                this.writeReg();
            }
        }
        String AppName
        {
            get
            {
                if (m_AppName == "")
                {
                    //assign AppName
                    string aname;
                    //get the executable name
                    m_AppName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
                    //remove extra infos

                }
                return m_AppName;
            }
        }
        public RegStoreClass()
        {

            try
            {
                //open or create sub key for read/write
                m_regKey = Registry.LocalMachine.CreateSubKey(AppName);
            }
            catch (Exception)
            {
            }
            //try to read value from sub key
            if (!readReg())
            {
                //something failed, write actual value to reg
                writeReg();
            }
        }
        public void Dispose(){
            m_regKey.Flush();
            m_regKey.Close();
        }
        bool readReg(){
            bool bRet=false;
            try 
            {
                string s = (string)m_regKey.GetValue("Value", "n/a");
                m_Value = s;
                bRet=true;
            }
            catch (Exception)
            {
            }
            return bRet;
        }
        bool writeReg(){
            bool bRet = false;
            try
            {
                m_regKey.SetValue("Value", m_Value, RegistryValueKind.String);
                m_regKey.Flush();
                bRet = true;
            }
            catch (Exception)
            {

            }
            return bRet;
        }
    }
}

在Form2代码中使用上面的类(例如regClass)。然后,当您需要存储或检索存储的值时:

保存新值:

regClass.sValue = comboBox1.SelectedItem.ToString();

读取保存的值:

string s = regClass.sValue

上面的类会激活应用程序名称本身,并将其用作子项,以便在注册表中存储值。

========================================== 如果您遇到需要存储越来越多的值,最好使用一个可以帮助您的类。存储可以是外部文件或注册表。外部文件可以像ini文件一样组织,或者具有xml文件结构。

app.settings的紧凑框架实现:http://www.codeproject.com/Articles/6308/AppSettings-Implementation-for-Compact-Frameworkhttp://www.codeproject.com/Articles/51848/Compact-Framework-Configuration-XML-File-Read-Writ

作为程序可执行文件的Ini或xml文件位置:Find INI File From application path and Read INI File in Compact framework C# 读/写ini文件http://www.codeproject.com/Articles/21896/INI-Reader-Writer-Class-for-C-VB-NET-and-VBScript

答案 2 :(得分:0)

最简单的方法是使用xmlserializer。这样您就不需要指定如何写入或读取每个值。只需传递它们的流对象和要序列化的对象,xmlserializer将负责编写值。与返回值相同,使用反序列化并获取对象并将其转换为目标类型。