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

本文关键字:检索 存储 Windows 移动 应用程序 字符串 | 更新日期: 2023-09-27 18:28:18

我正在使用Visual Studio 2008(.NET Framework 3.0)和C#开发一个Windows mobile 6.0应用程序,例如,我想将所选值保存在Form2中的comboBox中,并在关闭并重新打开Form1中的应用程序后检索它。

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

有很多方法可以实现这一点。我更喜欢将这个值(以及您想要保存的任何其他值)保存在.xml文件中。当你按下表单上的"确定"按钮时,它会将值保存到值中。打开表单后,它将打开并读取.xml文件,根据需要对值进行分类。查看此链接,了解如何读取和写入.xml文件。

首先,没有适用于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文件一样具有结构。

应用程序设置的Compact Framework实现:http://www.codeproject.com/Articles/6308/AppSettings-Implementation-for-Compact-Framework和http://www.codeproject.com/Articles/51848/Compact-Framework-Configuration-XML-File-Read-Writ

作为程序可执行文件的Ini或xml文件位置:从应用程序路径查找Ini文件并在Compact framework C中读取Ini文件#读取/写入ini文件http://www.codeproject.com/Articles/21896/INI-Reader-Writer-Class-for-C-VB-NET-and-VBScript

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