C#关于控件属性的集合设置问题--有过控件开发的人进-在线等。满意立即加分
namespace Searchs.Web
{
//[AttributeUsageAttribute(AttributeTargets.All)]
public class Search : Control
{
[Browsable(true),Bindable(true),Category("数据"),DefaultValue(""),Localizable(true), Description("Items列表项集合"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor(typeof(DropTextEditor), typeof(UITypeEditor)), PersistenceMode(PersistenceMode.InnerDefaultProperty)]
//指定属性在服务器控件中保持为内部文本。还指示将该属性定义为元素的默认属性。只能指定一个属性为默认属性
public DropList Items
{ get {
if (ViewState["_items"] == null)
{
ViewState["_items"] = new DropList();
}
return (DropList)ViewState["_items"];
}
set { ViewState["_items"] = value; }
}
}
//Items属性编辑器相关类#region Items属性编辑器
#region DropText属性编辑器
/// <summary>
/// 可编辑下拉列表框的Items属性编辑器
/// 提供一个用户界面,该界面可以在设计时编辑大多数类型(此处为DropItem)的集合。
/// </summary>
public class DropTextEditor : System.ComponentModel.Design.CollectionEditor
{
/// <summary>
/// 构造函数
/// </summary>
/// /// <param name="type"></param>
public DropTextEditor(Type type)
: base(type)
{
}
/// <summary>
/// 指示是否可一次选择多个集合项
/// </summary>
/// <returns>如果可以同时选择多个集合成员,则为 true;否则,为 false。此处默认情况返回 false</returns>
protected override bool CanSelectMultipleInstances()
{ return false; }
/// <summary>
/// 获取此集合需包含的数据类型
/// </summary>
/// <returns>类型:System.Type(此 Type 指示集合需包含的数据类型。)</returns>
protected override Type CreateCollectionItemType()
{
return typeof(DropItem);
}
}
#endregion
#region DropItem类
/// <summary>
/// 可编辑下拉列表框的Items属性类
/// </summary>
[TypeConverter(typeof(ExpandableObjectConverter))]
[Serializable]
//将DropItem类指示为可以序列化
public class DropItem
{
/// <summary>
/// 构造函数
/// </summary>
public DropItem()
{ }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="str_Text">文本内容</param>
/// <param name="str_Value">文本值</param>
public DropItem(string str_Text, string str_Value)
{ Text = str_Text; Value = str_Value; }
private string text; private string _value;
/// <summary>
/// 文本
/// </summary>
public string Text
{ get { return text; } set { text = value; if (string.IsNullOrEmpty(Value)) { Value = value; } } }
/// <summary>
/// 文本所对应值
/// </summary>
public string Value
{ get { return _value; } set { _value = value; if (string.IsNullOrEmpty(Text)) { Text = value; } } }
}
#endregion
#region DropList类,继承自ArrayList
/// <summary>
/// 下拉列表框Items属性的基类继承自System.Collections.ArrayList
/// </summary>
[Serializable]
public class DropList : ArrayList
{
/// <summary>
/// 将DropItem添加到DropList结尾处
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public int Add(DropItem value)
{
return base.Add(value);
}
}
问题说明--
注册完控件以后。给上面设定的属性集合编辑器中添加完属性以后。
保存不上。。就是添加完以后在重新生成解决方案的话。之前添加的结合属性一个都没了
如果在代码里面添加的话可以添加成功。可是属性窗口中添加完以后Items的Count为0,
不知道哪里出了问题。。 希望高手帮忙解答