0

フォルダのディレクトリパスをProperties.Settings.Default.Temporaryに保存し、ユーザーがPropertyGridを使用してこの値やその他の設定を変更できるようにします。

ユーザーが設定をリセットすることを決定した場合、Properties.Settings.Default.Reset()を使用して、Properties.Settings.Default.TemporaryをSystem.IO.Path.GetTempPath()の値に変更したいと思います。

System.Configuration.DefaultSettingValueAttributeについて知っています。このようなもの:

[global::System.Configuration.DefaultSettingValueAttribute(System.IO.Path.GetTempPath())]

動作しません。

関連する問題を説明しているアプリケーション設定(C#)にデフォルト値を保存することも読みましたが、上記の方法で問題を解決する方法があるのではないかと思います。

4

2 に答える 2

0

DefaultSettingValueAttribute.Valueプロパティはaであるため、string値が使用されるときに呼び出される関数呼び出しを渡すことはできません。実際、属性にコードを渡す機能はありません。リテラルのみが可能です。

代わりに、設定をリセットするアプリケーションコードで、コンパイル時にリテラルではない値を設定する設定と設定を行います(実行環境によって異なります)。

于 2012-07-26T14:36:41.100 に答える
0

私は自分自身を回避するためのアイデアを持っていました:

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute(null)]
    public string TemporaryDirectory
    {
        get
        {
            if (this["TemporaryDirectory"] == null)
            {
                return System.IO.Path.GetTempPath();
            }
            return ((string)this["TemporaryDirectory"]);
        }
        set
        {
            if (System.IO.Directory.Exists(value) == false)
            {
                throw new System.IO.DirectoryNotFoundException("Directory does not exist.");
            }
            this["TemporaryDirectory"] = value;
        }
    }

これに副作用があるかどうかはわかりませんが、これまでのところうまくいくようです。投稿して間もなくこのアイデアが浮かんだことをお詫び申し上げます。私はもう少し問題について考えるべきだった。

于 2012-07-26T15:11:17.817 に答える