1. ホーム
  2. c#

[解決済み] アプリケーション設定にint[]配列を格納する方法

2023-01-06 01:38:12

質問

C# express 2008 を使って、簡単な Windows Forms アプリケーションを作成しています。私は経験豊富な C++ 開発者ですが、C# と .NET についてはほとんど初心者です。

私は現在、設定デザイナーとこのようなコードを使用して、簡単なアプリケーション設定のいくつかを保存しています。

// Store setting  
Properties.Settings.Default.TargetLocation = txtLocation.Text;  
...  
// Restore setting  
txtLocation.Text = Properties.Settings.Default.TargetLocation;  

ここで、int 型の配列のどちらかを保存したいと思います ( int[] ) 、あるいは int のリスト ( List< int > ) を設定することができます。しかし、これをどのように行うのかがわかりません。私はドキュメント、stackoverflow、およびgoogleを検索しましたが、これを行う方法についてのまともな説明を見つけることができません。

私が見つけたまばらな例に基づく私の直感では、配列またはリストをラップするシリアライズ可能なクラスを作成する必要があり、その後、設定デザイナーでその型を使用できるようになると思います。しかし、私はこれを行う方法を正確に理解していません。

どのように解決するのですか?

設定ファイルを少し手動で編集する必要がありますが、その後は VS 環境とコードで問題なく動作します。また、追加の関数やラッパーは必要ありません。

問題は、VS では、シリアル化された int[] をデフォルトで選択することはできません。 そこで、任意の名前 (例: SomeTestSetting) の設定を作成し、任意の型 (例. string をデフォルトで使用します)。 変更を保存します。

プロジェクト フォルダに移動して、テキスト エディタ (たとえばメモ帳) で "PropertiesSettings.settings" ファイルを開きます。または、ソリューション エクスプローラで " -> Properties -> Settings.settings" を右クリックして VS で開き、 "Open With..." を選択して "XML Editor" または "Source Code (Text) Editor" を選択できます。 開いた xml 設定で、設定を見つけます (以下のように表示されます)。

<Setting Name="SomeTestSetting" Type="System.String" Scope="User">
  <Value Profile="(Default)" />
</Setting>

パラメータquot;Type"を System.String から System.Int32[] . これで、この部分は次のようになります。

<Setting Name="SomeTestSetting" Type="System.Int32[]" Scope="User">
  <Value Profile="(Default)" />
</Setting>

変更を保存して、プロジェクトの設定を再度開いてみてください。- SomeTestSettingの型が設定されました。 System.Int32[] という設定になっており、コード内だけでなく、VS 設定デザイナー (値も) からもアクセスおよび編集が可能になっています。