首页
新闻
会员
周边
捐助
园子
·
关注
·
粉丝
·
会员
·
随便看看
·
消息
欢迎,请先
登录
或者
注册
。
登录
/
注册
闪存
博客
发言
小组
投递
新闻
提问
博问
添加
收藏
文库
问题反馈
问题列表
我关注的
我的博问
博问标签
重写TextBox控件 增加新属性的问题
0
悬赏园豆:
100
[已解决问题]
解决于 2008-06-11 17:05
<P>问题大概是这样。 我重写一个TextBox 控件 增加两个属性 。</P> <P>屬性1 <BR> [Bindable(true)] <BR> [Category("自定义信息区")] <BR> [Browsable(true)] <BR> [Description("綁定實例對象對象名")] <BR> [DefaultValue("")] <BR> public string BindEntityName <BR> { <BR> get { } <BR> set { } <BR> } <BR> [Bindable(true)] <BR> [Category("自定义信息区")] <BR> [Browsable(true)] <BR> [Description("綁定實例對象對象屬性名稱")] <BR> [DefaultValue("")] <BR>屬性2 public string BindEntityPropertyName <BR> { <BR> get { } <BR> set { } <BR> } <BR><BR>具體的屬性的類型是否為string 在再議。現在如果我把一個重寫了的Textbox拖入頁面中的話。那么在它的Properties 視圖中 就會 多出兩個屬性一個是 BindEntityName 一個是 BindEntityPropertyName 。 <BR><BR>假設有下面一個class <BR><BR>public class person <BR>{ <BR> public string Name <BR> { <BR> ..... <BR> } <BR> public string Age <BR>{ <BR> ...... <BR> } <BR>} <BR><BR>當我在BindEntityName 輸入 “person” 以後 。BindEntityPropertyName 會自動綁定 Name Age 兩個item 提供用戶選擇。用戶可以選任意一個 賦給 BindEntityPropertyName 屬性。</P> <P>目前思路比較亂,希望 大家提示一下</P>
.NET技术
ASP.NET
那一年
|
初学一级
|
园豆:
70
提问于:2008-06-05 10:59
显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
<
>
分享
分享您的问题
最佳答案
0
你需要写一个UITypeEditor。 1. BindEntityPropertyName属性添加EditorAttribute,如下: [Editor(typeof(BindEntityPropertyTypeEditor), typeof(UITypeEditor))] 2. 实现这个Editor从UITypeEditor继承 3. override GetEditStyle 方法,返回UITypeEditorEditStyle.DropDown 4. override EditValue方法,实现一个DropDownEditor。具体请参考MSDN中UITypeEditor中的例子。 5. 通过context参数中的Instance属性,你可以得到BindEntityPropertyName属性所在的类型实例。从它上面,你可以取到BindEntityName属性的值,通过反射可以取到你想要的属性。 我想,按照你的想法,这两个属性是字符串,可能各方面的复杂度都会低一些。另外,如果你希望在BindEntityName属性上也实现下拉列表框,可以参考上面的实现。如果你的列表框中的项目是固定的,建议你实现一个TypeConverter,实现起来更容易。如下: 1. 在BindEntityName上添加TypeConverterAttribute如下: [TypeConverter(typeof(BindEntityNameTypeConverter))] 2. override GetStandardValuesSupported 方法,返回True 3. override GetStandardValues方法,返回你给用户的备选项。 呵呵,刚才发现,TypeConverter上也可以拿到ITypeDescriptorContext。因此,BindEntityPropertyName也可以使用类似的方法实现。我没有具体做过,你自己试一试吧。 :)
Colin Han
|
老鸟四级
|
园豆:3041
|
2008-06-05 14:42
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
其他回答(3)
0
BindEntityName 是一个变量的名字,而不是一个类名;这样设计有问题呀,恐怕设计时的作用域作用不到局部变量。 这样的设计有意义吗?
玉开
|
园豆:8822
(大侠五级)
|
2008-06-05 11:26
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
0
给自定义控件加属性 跟给用户控件加属性是一样的
yeyang
|
园豆:418
(菜鸟二级)
|
2008-06-05 13:02
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
0
你的意思是在一个控件里面定义两个属性还是,定义一个person的属性,你很为难. 其实都可以,楼主可以看看这篇文章,看完以后相信对你有帮助 http://www.cnblogs.com/Clingingboy/archive/2006/08/08/470980.html
Clingingboy
|
园豆:215
(菜鸟二级)
|
2008-06-05 15:07
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要
登录
以后才能回答,未注册用户请先
注册
。