Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (.net)类设计问题_C#_.net_Vb.net_Attributes - Fatal编程技术网

C# (.net)类设计问题

C# (.net)类设计问题,c#,.net,vb.net,attributes,C#,.net,Vb.net,Attributes,我的典型应用程序有几个文本框、复选按钮、单选按钮等等。我总是想在程序启动时加载用户上次使用的设置,还想在用户单击“保存设置”或关闭应用程序时保存设置。当用户试图保存设置时,我必须检查每个控件的输入错误(有时它们必须有一个最大长度,有时只有大写字母,有时还有其他东西,它们都没有规则,每次都不一样),只有在一切正常的情况下,我才让他保存选项。如果出现错误,则不保存任何选项,并且我的errorcontrol提供程序将弹出一个输入类型信息的说明,该信息应放在该控件中 我一直在为我所有的项目从头开始设计这

我的典型应用程序有几个文本框、复选按钮、单选按钮等等。我总是想在程序启动时加载用户上次使用的设置,还想在用户单击“保存设置”或关闭应用程序时保存设置。当用户试图保存设置时,我必须检查每个控件的输入错误(有时它们必须有一个最大长度,有时只有大写字母,有时还有其他东西,它们都没有规则,每次都不一样),只有在一切正常的情况下,我才让他保存选项。如果出现错误,则不保存任何选项,并且我的errorcontrol提供程序将弹出一个输入类型信息的说明,该信息应放在该控件中

我一直在为我所有的项目从头开始设计这个,但这样做很痛苦。所以我想也许现在是时候去图书馆帮我了。我最初认为,最好是让表单上的所有控件都成为保存/加载过程的一部分,并与它们关联一个属性,比如

public delegate bool InputIsOkHandler();

public class OptionsAttribute : Attribute {

public Control controlRef;
public InputIsOkHandler IsInputOk;
public string errorMessageToShowOnErrorProvider;

    public OptionsAttribute(Control controlRef, InputIsOkHandler inputHandler, string errMessage) {
...
}
}
这里的主要问题是,当我在给定变量上声明属性时:

[Options(...)]
TextBox textBox1 = new TextBox();
我去拿

错误1属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式

所以我想这种方法不是最好的。在这种情况下你们会怎么做?你会使用属性吗?你会使用其他机制吗


谢谢

您知道吗.NET从2.0开始就已经包含了这样一个系统了?请看,这是WestWind提供的。

您知道吗.NET从2.0开始就已经包含了这样一个系统了?请参阅,这是WestWind提供的。

ASP.NET 2.0中支持的个性化设置和用户配置文件可以很好地实现您的目标。
您可以查看这篇MSDN文章以了解概述

ASP.NET 2.0中支持的个性化设置和用户配置文件可以很好地实现您的目标。
您可以查看这篇MSDN文章以了解概述

您可以将这些括号中的内容发布到Options属性中吗?您收到的错误表明您不正确地使用了属性,但没有理由不能使用它们。问题是构造函数需要初始化对象,而您不能使用属性来初始化对象。您能为选项属性发布括号中的内容吗?您收到的错误表明您不正确地使用了属性,但没有理由不能使用它们。问题是构造函数需要初始化对象,而您不能用属性来初始化。从我在codeproject上读到的内容来看,这正是我想要的。坦克斯!从我在codeproject上读到的内容来看,这正是我想要的。坦克斯!