很偏门的问题,特来高手多多的c#版求教:如何动态给PropertyGrid1加载属性

问题描述

缘由,我写一个控件,比较复杂,而且一些对这个控件的设置功能,不是很常用,所有我决定把这些属性写成设计时属性。这本来也不是问题,继承ControlDesigner写个设计机,就可以动态加载属性了。但按自己比较贪心点,我创建一个窗体(frmTest),然后在上面添加一个PropertyGrid1属性网格,然后给控件添加智能标志菜单,这个菜单功能就弹出这个窗体,供人设置这个控件的属性。但我发现,动态添加的属性,在vs设计环境里面的属性网格,可以正常加载这个动态属性,但在我的窗口,就不能正常加载,不知道啥原因,我试了好久,就是没能够在属性网格动态显示属性?如下面图片

解决方案

解决方案二:
'这是设计机的代码ImportsSystem.ComponentModelImportsSystem.ComponentModel.DesignImportsSystem.Windows.FormsImportsSystem.Windows.Forms.DesignPublicClassItemDesign2InheritsControlDesigner'添加谓词PublicOverridesReadOnlyPropertyVerbs()AsSystem.ComponentModel.Design.DesignerVerbCollectionGet'ReturnMyBase.VerbsDimmyVerbsAsDesignerVerbCollection=NewDesignerVerbCollection'MyBase.VerbsDimCreateTableVer=NewDesignerVerb("创建表格",AddressOfCreateTable)myVerbs.Add(CreateTableVer)ReturnmyVerbsEndGetEndPropertySubCreateTable()DimfrmAsNewfrmTest(Newitem)frm.ShowDialog()EndSubProtectedOverridesSubPostFilterProperties(ByValpropertiesAsSystem.Collections.IDictionary)MyBase.PostFilterProperties(properties)DimpdAsPropertyDescriptor=TypeDescriptor.CreateProperty(_GetType(itemdesign),_"OutlineColor",_GetType(System.Drawing.Color),_NewAttribute(){NewDesignOnlyAttribute(True)})properties.Add("OutlineColor",pd)EndSubEndClass

'这是测试控件ImportsSystem.ComponentModel.DesignImportsSystem.ComponentModelImportsSystem.Windows.FormsImportsSystem.Windows.Forms.Design<Designer(GetType(ItemDesign2))>_PublicClassitemInheritsControlPrivate_ageAsStringPrivate_CaptionAsStringPrivate_IDAsInt32Propertyage()AsStringGetReturn_ageEndGetSet(ByValvalueAsString)_age=valueEndSetEndPropertyPropertycaption()AsStringGetReturn_CaptionEndGetSet(ByValvalueAsString)_Caption=valueEndSetEndPropertyPropertyID()AsInt32GetReturn_IDEndGetSet(ByValvalueAsInt32)_ID=valueEndSetEndPropertyEndClass

'这是一个测试窗体,里面只放一个属性网格PublicClassfrmTestPrivateSubfrmitem_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadEndSubPrivate_itemAsitemPublicSubNew(ByValitemAsitem)'此调用是Windows窗体设计器所必需的。InitializeComponent()'在InitializeComponent()调用之后添加任何初始化。_item=itemPropertyGrid1.SelectedObject=_itemEndSubEndClass

还有一个form1窗体,在上面放一个item,item有智能标志,点击哪个创建表格菜单(忘记修改这个名字)就是可以弹出frmtest窗体,这时还是处于设计模式的
解决方案三:
http://download.csdn.net/detail/zhaigates/1081108
解决方案四:
楼上提供的代码跟我想要实现的功能好像差很远?或是是我看得不是很懂把?哪个例子的所谓动态属性其实是绑定到一个集合,而我并不需要。我的代码也实现动态加载属性,但只在vs自己的属性网格,郁闷
解决方案五:
该回复于2012-01-17 09:02:29被版主删除
解决方案六:
走错地方了.这里是C
解决方案七:
#c#跟vb。net师出同门,很多是相通的。在这里求教,是因为自己懂得底层的高手相对vb。net会更多点。
解决方案八:
楼主是希望PropertyGrid控件,加载的数据是自己定义的,而不是只绑定一个对象,自动就出现数据的;是不是这个意思??——我可以欣慰的告诉楼主两哥消息:一个好消息,一个坏消息算了,先说坏消息吧:打开SQLServer2008,任意找一个数据表的设计界面:你会看到下面的PropertyGrid控件,展示的是数据列的信息:(常规)(名称)——为什么,微软要将"常规"前后加括号,要在"名称"前后加括号??——因为不加括号,(名称)会跑到默认值或绑定下面去——————————————————————————————————————————就是说,PropertyGrid这个控件,微软自己都连他的属性顺序都控制不了,微软人员就更加控制不了动态添加属性项了!!——微软人员都办不到,你怎么可以办到??好消息是第三方的Dex控件中,也有一个PropertyGrid控件,这个第三方的属性控件支持手动添加!!————————————————————————————————————————————————楼主的问题,我曾经也研究过:那时我是想仿写一个SQLServer2008的客户端:http://hi.baidu.com/my_responsibility/album/c%23%20sqlforever%20%A1%AA%A1%AA2011%CD%F5%C5%C6%CF%EE%C4%BF%D6%AE%D2%BB写到这个属性控件时,也是没有办法——意外发现,微软无能为力的这个细节楼主,暂时认命吧....
解决方案九:
Dex控件又称Dx控件,楼主疯狂百度去吧.....
解决方案十:
楼主仔细看你自己的截图:VS中:“设计”下面的那个Name——也是加了括号的!微软无能为力......
解决方案十一:
该回复于2012-02-02 09:04:30被版主删除

时间: 2024-09-13 14:10:56

很偏门的问题,特来高手多多的c#版求教:如何动态给PropertyGrid1加载属性的相关文章

后台数据完全处理完的时间很长,页面一直在转一个等待页面,想要修改,可以变成一边处理一边加载的

问题描述 后台处理程序在做一个测试,页面进行加载,使用ViewData将一个dataset传到页面,然后页面对这个dataset进行分解展示,现在希望能够实现,处理完成一条数据加载一条.. 解决方案 解决方案二:求大神解决...解决方案三:处理一条加载一条中间会有通知事件相当于条数据都要通知得不偿失解决方案四:你可以用ajax加载,在数据正在处理时显示"等待中..."解决方案五:多线程应该可以一般BS的系统,数据库里都有个分页的存储过程吧解决方案六:做是可以做,用SignalR,后台注

javascript for循环从入门到偏门(效率优化+奇特用法)_javascript技巧

一,for循环的基本写法 代码如下: 复制代码 代码如下: //例一for(var i=1;i<=10;i++) { alert(i); } 这段代码太简单了,我都不好意思拿出手.代码的执行结果是依次弹出1到10,PS:在早期的IE如IE6中,你把10改成10000,就能让用户一直点确定什么也不能干了哈哈--不要说是我出的主意. 由于这是一篇基础课程,所以我们回归正题来详细分析一下这段代码吧. for循环的结构都是类似的,任意一个for循环都是这样的: for(开始前;循环进行的条件;循环一次结

一个让98%的Java程序员犯难的偏门问题

程序|程序员|问题 一个学员曾经问了我一个他在sun公司的论坛上看到的怪问题,因为这个问题一直没有人解答,加之这个问题所涉及的知识有点偏门,所以,我断言这个问题至少有98%的Java程序员不会! (之所以这么断言,是因为我遇到的高手和低手程序员,好像并没有精力去研究那些琐碎的细节,并且他们工作中似乎也不需要.如果你看到了这个问题,再去查书和思考,最终找出答案,在这之前也应该算不会,呵呵,另外,100个java程序员中有2个会这个,并不过分,现在已经有2000人看了这篇文章,至少应该有40个人会这

一个让98%的Java程序员犯难的偏门问题

一个学员曾经问了我一个他在sun公司的论坛上看到的怪问题,因为这个问题一直没有人解答,加之这个问题所涉及的知识有点偏门,所以,我断言这个问题至少有98%的Java程序员不会! (之所以这么断言,是因为我遇到的高手和低手程序员,好像并没有精力去研究那些琐碎的细节,并且他们工作中似乎也不需要.如果你看到了这个问题,再去查书和思考,最终找出答案,在这之前也应该算不会,呵呵,另外,100个java程序员中有2个会这个,并不过分,现在已经有2000人看了这篇文章,至少应该有40个人会这个问题,大家不要看下

Mybaits关于if判断 真的很邪门

问题描述 Mybaits关于if判断 真的很邪门 <if test="level != null and level.toString()=='1'"> and t.talent_manager=#{id} </if> 当level!='1' 判断是正确的 当level='1'时,应走判断但是没有走,为什么 解决方案 &(*^&(^&%&$&&*(&*((&%&%& 解决方案二: 今

关于.net操作SVG遇到的一个很奇怪的问题,散分请教高手

问题描述 环境:我实现的功能是加载一个SVG文档,写入内容后重新保存该SVG文档代码:xmlDoc.Load(System.Web.HttpContext.Current.Server.MapPath("svgmap.svgz"));svgElement=xmlDoc.GetElementById("EquipmentList");出错现象:1.在我本机这些代码执行起来没问题.2.把系统部署到测试机上,系统执行到svgElement=xmlDoc.GetElemen

高手看看 急得很 水晶报表动态加载显示的问题

问题描述 公式绑定,实现代码是(总是报该字段名无效,怎么回事呢!!):CR_Document.DataDefinition.FormulaFields["paraField1"].Text="{"+ds.Tables["item"].TableName+"."+ds.Tables["item"].Columns[0].ColumnName.ToString()+""}";str

黑客之门的魅力:感染与加载

最近对后门产生了很浓厚的兴趣,上网与各位高手讨论的时候,有人提到了"黑客之门"很厉害,也算是推出来的比较成功的一个后门,于是上网下载了一个研究研究,顺便也学习学习其中的方法与技巧.不敢独享,分享于此,同时希望高手们指教.     "黑客之门"介绍     黑客之门采用的目前一些先进的后门技术,它只有一个Dll文件,通过感染系统文件启动自身,被感染的系统文件大小和日期都不会改变:同时采用线程插入技术,本身没有进程:本身不开端口,而是重用系统进程开的任意一个端口,如80

黑客之门的魅力:感染与加载(图)_漏洞研究

最近对后门产生了很浓厚的兴趣,上网与各位高手讨论的时候,有人提到了"黑客之门"很厉害,也算是推出来的比较成功的一个后门,于是上网下载了一个研究研究,顺便也学习学习其中的方法与技巧.不敢独享,分享于此,同时希望高手们指教.     "黑客之门"介绍    黑客之门采用的目前一些先进的后门技术,它只有一个Dll文件,通过感染系统文件启动自身,被感染的系统文件大小和日期都不会改变:同时采用线程插入技术,本身没有进程:本身不开端口,而是重用系统进程开的任意一个端口,如80,