学winform编程建议看[Csharp入门经典(第四版)].(美)沃森,(美)内格尔
网上有电子版的书以及旁颤闭源代码
vs2008的用户自定义控件
近日里,由于框架改造的需要,需要将跳转菜单(GotoMenu)功能从原有的以Config
配置文件
的方式,修改为在Design
Time环境下进行可视化配置的方式实现。于是做了一些准备,在Microsoft
MSDN上翻阅了诸多资料,意外地,在
扩展设计时支持的外部资源
中找到了一些好东东,首先推荐一下。
言归正传,微软的工程师们当初在设计Visual
Studio的设计时编辑器时,考虑到开发人员需要在运行时以及设计时绘制,调试相关的控件、组件。将VS界面设计器设计为一个“可扩展”的属性编辑器。
界面编辑器的自定义,最常用的是使用属性(
Attribute
,为了与属性,Property,区分开,下文中使用“特性”)进行界面浏览帆茄设计。其中,最常用的,便是BrowsableAttribute。默认情况下,用户自定义组件中的属性都是默认可见了,即默认BrowsableAttribute为true的情况。当不希望某个属性在属性编辑器中显示时,我们可以做如下设置:
private
Person
person
=
new
Person()
//[Browsable(false)]
public
Person
Person
{
get
{
return
this.person
}
}
此时,在属性编辑器中,我们可以看到,Person属性是可见的。
将
//[Browsable(false)]
注释去除,此时,Person属性,将不会在属性编辑器中展现出来:
回顾第
一张图
中显示的内容,我们可以发现,Person属性是不可编辑的,并且,在窗体Designer.cs窗体设计内容(本文中为Form1.Designer.cs)文件中,找不到关于Person属性的设置
这是为何呢?
在VS的属性编辑器的信息传递到.net程序(C#,VB)代码的时候,其相应的属性信息是需要进行
序列化
后,将属性内容
持久化
到
本地代码
中的。
Person属性是一个自定义类型的属性设置,因此,属性编辑器在序列盯乎化过程中,无法找到其相应的序列化设置,因此,在编辑设置该属性时,程序员需要指定序列化内容。添加如下代码:
private
Person
person
=
new
Person()
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public
Person
Person
{
get
{
return
this.person
}
}
回到窗体设计代码中(Designer.cs)
当然,在自定义控件的过程中,如果涉及到序列(List)的设置,也同样是需要指定序列化内容的。
除了以上描述的两个属性外,Visuao
Studio的扩凯轿悉展设计时支持内容中,还包括DevaultValueAttribute,CategoryAttribute等,具体的内容可到MSDN查阅。
你是不是每次添加的都是一个WindowsApplication,WindowsApplication被添加的时候是一定会默认带有一个Form1和一个Program.cs的,你应该添加的是WindowsForm,在添加的时州枯消败毕候册知会让你给窗体命名的。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)