zoukankan      html  css  js  c++  java
  • 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属性是可见的。

    image

    //[Browsable(false)]

    注释去除,此时,Person属性,将不会在属性编辑器中展现出来:

     image


    回顾第一张图中显示的内容,我们可以发现,Person属性是不可编辑的,并且,在窗体Designer.cs窗体设计内容(本文中为Form1.Designer.cs)文件中,找不到关于Person属性的设置

    image

    这是为何呢?

    在VS的属性编辑器的信息传递到.net程序(C#,VB)代码的时候,其相应的属性信息是需要进行序列化后,将属性内容持久化到本地代码中的。

    Person属性是一个自定义类型的属性设置,因此,属性编辑器在序列化过程中,无法找到其相应的序列化设置,因此,在编辑设置该属性时,程序员需要指定序列化内容。添加如下代码:

    private Person person = new Person();
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public Person Person
    {
        get { return this.person; }
    }

    回到窗体设计代码中(Designer.cs)

    image

    当然,在自定义控件的过程中,如果涉及到序列(List)的设置,也同样是需要指定序列化内容的。

    除了以上描述的两个属性外,Visuao Studio的扩展设计时支持内容中,还包括DevaultValueAttribute,CategoryAttribute等,具体的内容可到MSDN查阅。

    更多动态请关注微信公众号 dbagrant
  • 相关阅读:
    BZOJ1854: [Scoi2010]游戏
    NOIP2017 【游记】
    NOIP2017 考前汇总
    最长上升子序列nlogn算法
    BZOJ3110 K大数查询 【线段树 + 整体二分 或 树套树(非正解)】
    BZOJ1089 [SCOI2003]严格n元树 【dp + 高精】
    BZOJ1072 排列perm 【状压dp】
    NOIP2003 传染病控制 【搜索 + 卡时】
    BZOJ 1070 修车 【费用流】
    [SCOI2005]最大子矩阵
  • 原文地址:https://www.cnblogs.com/laoyumi/p/1732249.html
Copyright © 2011-2022 走看看