| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 975 人关注过本帖
标题:请高手帮忙:如何处理封装控件的属性问题
只看楼主 加入收藏
wwbook
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-21
收藏
 问题点数:0 回复次数:4 
请高手帮忙:如何处理封装控件的属性问题
问题描述:
   自己封装控件的一个属性,例如TextAtt,在这个属性下想要以属性展开的形式(就想Font带+号展现的形式)增加一个Name属性,怎么实现?
搜索更多相关主题的帖子: 控件 属性 封装 
2008-10-21 08:56
铲铲
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:506
专家分:0
注 册:2006-5-2
收藏
得分:0 
在属性工具栏内显示加号,这种“复合属性”实际上就是一个对象。
Font属性获取一个Font对象,该对象包含有Size、FontFamily等等属性,因此其表现在属性框中就变成可以展开的。

你可以把TextAtt封装为一个类,该类包含若干属性,如Text,在控件中,属性TextAtt获取TextAtt类实例化对象,在属性工具栏中即显示为加号,展开获得Text属性

铲铲是也
2008-10-21 11:12
wwbook
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-21
收藏
得分:0 
关键的问题是按照这种方法,WinForm下好用,WebForm下能显示出来,但是设计界面所设置的值保存不上呀
2008-10-21 12:08
铲铲
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:506
专家分:0
注 册:2006-5-2
收藏
得分:0 
若要在中保存一个属性的状态(值),必须借用ViewState。
众所周知,HTTP是一个无状态协议,一次一连接,互相独立。不能跟踪用户和形成会话。因此才会有诸如Cookie和Session机制来跟踪用户形成会话。
一张网页,当客户端发出请求时,才开始具体的初始化对象操作,当网页被发送到客户端且连接关闭以后,即释放对象,进入销毁程序。下一次用户请求时,再次初始化对象。而上一次初始化所保存的任何状态和值都不复存在,除非你使用ViewState。

ViewState被携带发送到客户端,并且随提交再次返回服务器,这时,虽然先前对象已不存在,但本次提交请求初始化对象以后,会利用ViewState重建对象状态。

因此,你在写属性时,应当将属性保存在ViewState集合里,如果你自己新建类,也应想办法将父类(Page、自定义控件)的ViewState引入你自己的类中,并将属性保存进去。

如:
public string Title
{
    get
    {
        if (this.ViewState["Title"] != null)
        {
            return (string)this.ViewState["Title"];
        }
        return "[无标题]";
    }
    set
    {
            this.ViewState["Title"] = value;
    }
}

铲铲是也
2008-10-22 09:42
wwbook
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-21
收藏
得分:0 
bool dataBindings;
        string BindSource;

        //增加绑定属性的扩展
        [TypeConverter(typeof(ExpandableObjectConverter))]
        public class BindAttriClass
        {
            public BindAttriClass()
            {
            }

            private string Ptext = "";
            private string Ptext1 = "";
            private string Ptext2 = "";
            //属性类中属性的属性,修改时通知父
            [NotifyParentProperty(true),]
            //描述增加的方法QMSDOSet:集合;QMDisplayField:显示的内容;QMValueField:存储的内容
            public string QMSDOSet
            {
                get { return Ptext; }
                set { Ptext = value; }
            }

            [NotifyParentProperty(true),]
            public string QMDisplayField
            {
                get { return Ptext1; }
                set { Ptext1 = value; }
            }

            [NotifyParentProperty(true),]
            public string QMValueField
            {
                get { return Ptext2; }
                set { Ptext2 = value; }
            }
        }

        public bool QMDataBindings
        {
            get { return dataBindings; }
            set { dataBindings = value; }
        }


        public string QMBindSource
        {
            get { return BindSource; }
            set { BindSource = value; }
        }

        public BindAttriClass qMBindAtts = new BindAttriClass();

        [PersistenceMode(PersistenceMode.InnerProperty), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        //PersistenceMode.InnerProperty理解为,这个属性是在aspx中标记为嵌套标记
        //DesignerSerializationVisibility.Content,代码生成器产生对象内容的代码,而不是对象本身的代码。
        public BindAttriClass QMBindAtts
        {
            get { return qMBindAtts; }
            set
            {
                qMBindAtts = value;
            }
        }
    }
2008-10-23 08:22
快速回复:请高手帮忙:如何处理封装控件的属性问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018221 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved