自定义类型应用程序设置

时间:2012-10-23 18:21:04

标签: c# types settings

我环顾四周,到目前为止没有任何帮助。

我目前有这段代码:

namespace InstaShot
{
    [Serializable]
    public class Hotkey
    {
        public uint Modifier { get; private set; }
        public int Key { get; private set; }
        public Hotkey(uint modifier, int key)
        {
            this.Modifier = modifier;
            this.Key = key;
        }
    }
}

然而,每当我尝试在我的应用程序设置中创建一个设置时,我得到:

  

未定义“InstaShot.Hotkey”类型。

当它显然是...... 它适用于同一命名空间内的其他类,而不是那个...现在真的很烦我。

2 个答案:

答案 0 :(得分:36)

虽然作者可能会提出问题,但如果其他人遇到同样的问题,也值得发布答案。

首先让我澄清问题,因为对问题的评论表明存在一些含糊之处。 OP不询问自定义配置部分。相反,问题是关于使用标准设置 - 在Visual Studio中打开项目属性上的“设置”选项卡时获得的设置窗格,如下所示:

standard Visual Studio project settings

对于答案,您必须添加默认构造函数,即您在其中指定默认值的无参数构造函数。一旦我这样做,我就可以指定类型以获得上图中显示的结果。 (请注意,如果您的自定义类型与您的设置位于同一个程序集中,则在设置设计器中打开下拉列表时,将显示在可用类型列表中,也不会 - 选择{ {1}} - 它也会出现在该列表中,但此时您可以输入完全限定名称。)

答案 1 :(得分:0)

这是一个更常见的解决方案,也可以用于集合: 在设置中按查看代码以打开Settings.cs

通过以下方式添加您的媒体资源:

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("")]
    public YourType PropertyName
    {
        get => (YourType)this["PropertyName"];
        set => this["PropertyName"] = value;
    }

此处的您的类型可以像List<object>这样的集合。 DefaultSettingValueAttribute用于使用默认构造函数进行初始化,否则它将为null作为默认值。