当我们定义一个enum属性时,通过IDE的属性页能看到一个下拉的列表。能不能为一个字符属性也定义一个下拉列表呢?实现也不是很复杂,需要定义一个TypeConverter,看下面代码
为字符属性定义选项[web自定义控件]public class MyStrTypeConverter : TypeConverter

上面的MyStrConfigurations是一个管理这个字符列表的类,主要使用其属性数组Names。先不管这个,看一下如何使用该类
为字符属性定义选项[web自定义控件]private string mStrAdType;
为字符属性定义选项[web自定义控件][TypeConverter(
typeof(MyStrTypeConverter))]
关键是定义属性的TypeConverter(typeof(MyStrTypeConverter))

过程就是上面的两步就可以了。

上面所说的MyStrConfigurations,我给他的任务是两个
1.添加默认的配置文件(Mystrings.xml)到网站的App_Data目录下。我原指望web.config,发现设计时读取几乎不可能。干脆自己定义一个配置文件。
2.读取网站app_data目录下的Mystrings.xml构造属性下拉列表。


读取项目所在目录,一般都使用下面的代码,代码思路是取项目被选中的项。注意当前打开的文件可能不是当前被选中的项
为字符属性定义选项[web自定义控件]string path = "";
为字符属性定义选项[web自定义控件]EnvDTE.DTE devenv 
= (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.8.0");//vs2005. vs2003应是VisualStudio.DTE.7.1
为字符属性定义选项[web自定义控件]
Array projects = (System.Array)devenv.ActiveSolutionProjects;
为字符属性定义选项[web自定义控件]
if ((projects.Length == 0|| (projects.Length > 1))

解决方案一般有几个项目,如果之前打开了一个设计的aspx,偶尔又选择并打开其他项目下的文件编辑,回到前面的aspx编辑时当前活动的文本对象就不是当前选中的项,路径就错了。能否取得当前活动文档对象的项目呢?通过宏编辑器尝试了不少的方法,结果发现以下代码简单可靠。是否有什么不足呢?
为字符属性定义选项[web自定义控件]string path = "";
为字符属性定义选项[web自定义控件]EnvDTE.DTE devenv 
= (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.8.0");
为字符属性定义选项[web自定义控件]System.IO.FileInfo info 
= new System.IO.FileInfo(devenv.ActiveDocument.ProjectItem.ContainingProject.FullName);
为字符属性定义选项[web自定义控件]path 
= info.Directory.FullName;
为字符属性定义选项[web自定义控件]

如何向站点输出默认的配置xml文件呢?

首先编辑默认的xml作为“嵌入的资源”作为控件库项目的一项内容发布
最后就是控件读取自身资源输出到项目指定目录下。以下是读取输出的一段代码,参考自http://www.codeproject.com/KB/custom-controls/MP3PlayerControl.aspx


使用的方法, MyStrConfigurations类的静态方法GetConfig
为字符属性定义选项[web自定义控件]public static MyStrConfigurations GetConfig()

相关文章: