1

WinformsアプリケーションにSettings.settingsという「設定ファイル」があり、カスタムメソッドなどの部分クラスがあります。任意のキーに基づいて動的設定をロード/保存する方法はありますか?

たとえば、アプリケーションに列幅を保存/ロードするListViewがいくつかあります。各リストビューの各列の幅設定を作成する代わりに、幅を自動的にロード/保存する簡単な方法が必要です。

以下は、私が試した保存方法の例です。

internal sealed partial class Settings
{
    public void SetListViewColumnWidths(ListView listView)
    {
        String baseKey = listView.Name;
        foreach (ColumnHeader h in listView.Columns)
        {
            String key = String.Format("{0}-{1}", baseKey, h.Index);
            this[key] = h.Width;
        }
    }
}

そのコードを実行すると、「設定プロパティ'TestsListView-0'が見つかりませんでした」というエラーが表示されます。足りないものはありますか?

4

3 に答える 3

1

列幅の設定を Xml Serializable オブジェクトに保存します。つまり、 IXmlSerializableを実装するものは、Settings.settings にそのタイプの単一の設定エントリを作成します。

適切なオプションは、おそらく Xml Serializable Dictionary です。簡単なグーグル検索で、それを実装する方法を説明するかなりの数の異なるブログ投稿が見つかりました.

他の回答で述べたように、このオブジェクトがユーザー設定であることを確認する必要があります。設定インスタンスを初期化する必要がある場合もあります。つまり、XmlSerializableDictionary() インスタンスを作成し、設定が null の場合はそれを設定に割り当てます。設定サブシステムは、複雑な設定オブジェクトの既定のインスタンスを作成しません。

また、これらの設定をアセンブリ バージョン間で保持する (つまり、アップグレード可能にする) 場合は、アプリケーションの起動時に設定をアップグレードする必要があります。これについては、 Miha Markič のブログとRaghavendra Prabhu のブログで詳しく説明されています。

于 2008-10-17T10:56:54.630 に答える
0

ユーザー設定で Settings.Save() などを実行できますが、そのような設定はアプリ ディレクトリの xxx.exe.config ファイルに保存されないことに注意してください。実際には、ユーザー フォルダーの奥深くに移動します (ドライブで xxx.exe.config を検索して見つけます)。次にアプリ ディレクトリの xxx.exe.config を手動で変更すると、不思議なことに変更が適用されません (システムは、ユーザー ディレクトリから保存されたものを引き続き使用しています)。

于 2008-10-14T16:45:04.273 に答える
0

エラーだと思います

設定プロパティ「キー」が見つかりませんでした。

「キー」値が設定ファイルに存在しないために発生します(かなり自明です)。

私の知る限り、設定値をプログラムで追加することはできません。必要なすべての設定をファイルに追加することを検討する必要があるかもしれませんが、それらがいったんそこにあれば、使用できると思います変更を保存するために指定した種類のコード。

変更を保存するには、それらが「アプリケーション」ではなく「ユーザー」設定であることを確認する必要があります。

設定ファイルは非常に単純な XML であるため、XML をファイルに直接書き込むことで問題を解決できる可能性がありますが、私はそれを行ったことがないため、確実に機能するかどうかはわかりませんし、必ずしもそのアプローチを推奨することもできません。

http://msdn.microsoft.com/en-us/library/cftf714c.aspxは、開始するための MSDN リンクです。

于 2008-10-14T14:54:47.270 に答える