2

C# で Visual Studio 2008 (.NET Framework 3.0) を使用して Windows モバイル 6.0 アプリケーションを開発しています。たとえば、ComboBox から選択した値を Form2 に保存し、後で Form1 でアプリケーションを閉じて再度開いた後に取得したいと考えています。 .

4

3 に答える 3

0

まず、Windows Mobile 用の Compact Framework バージョン 3.0 はありません。Windows Phone 7 または 8 のことを考えていますか?

Windows Mobile (Compact Framework 2.0 または 3.5) の場合: 値を 1 つだけ保存または取得する場合は、レジストリを使用して値を保存および復元できます。

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 の Compact Framework 実装: http://www.codeproject.com/Articles/6308/AppSettings-Implementation-for-Compact-Frameworkおよびhttp://www.codeproject.com/Articles/51848/Compact-Framework-構成 XML ファイル読み取り書き込み

プログラム実行可能ファイルとしての ini または xml ファイルの場所:アプリケーション パスから INI ファイルを検索し、Compact フレームワークで INI ファイルを読み取ります C# ini ファイルの読み取り/書き込みhttp://www.codeproject.com/Articles/21896/INI-Reader-Writer-Class- for-C-VB-NET-and-VBScript

于 2013-08-21T04:08:54.490 に答える
0

最も簡単な方法は、xmlserializer を使用することです。この方法では、すべての値の書き込み方法や読み取り方法を指定する必要はありません。ストリーム オブジェクトとシリアル化するオブジェクトを渡すだけで、xmlserializer が値の書き込みを処理します。値を取得する場合と同様に、逆シリアル化を使用してオブジェクトを取得し、それをターゲットの型にキャストします。

于 2014-05-03T16:42:33.770 に答える
0

これを可能にする方法はたくさんあります。この値を (保存したい他の値と共に) .xml ファイル内に保存することをお勧めします。フォームの「OK」ボタンを押すと、値が値に保存されます。フォームを開くと、.xml ファイルが開かれ、必要に応じて値が割り当てられます。.xml ファイルの読み書き方法については、このリンクを参照してください。

于 2013-08-20T15:24:03.717 に答える