MSPlus WebControls For ASP.NET. (服务器端控件)

Upgrade Develop Efficiency,Surprise For U! - Mack.Z

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  22 随笔 :: 42 文章 :: 901 评论 :: 14 Trackbacks
今天看见一个网友的留言:
有一个问题请教一下兄台,对于继承自microsoft的.net framework中现有的组件,怎么将一些属性屏蔽掉,就是新的组件不提供继承来的属性,比如继承Panel新编写EPanel,对于panel的属性的BackColor怎么屏蔽掉??

这个问题解决方法如下:

第一步:在你的控件类中定义设计时中提供服务的类
[Designer(typeof (MSPlus.Web.UI.Design.WebControls.ButtonDesigner))]
    [Description( "MSPlus WebControl Button" )]
    [Designer(
typeof (MSPlus.Web.UI.Design.WebControls.ButtonDesigner))]
    
public sealed class Button: MSPlusWebControl, IPostBackEventHandler
    
{
}

第二步:新增一个设计时服务类,这个类继承 System.Web.UI.Design.ControlDesigner
第三步:重写PostFilterProperties()方法,

允许设计器从通过 TypeDescriptor 公开的属性集中更改或移除项。

/**
 *    命名空间:    MSPlus.Web.UI.Design.WebControls
 *    类:                ButtonDesigner
 * 
 *    作者:            Mack.Z
 *    完成日期:    2003-12-21    
 *    版权信息:    MSLULU (2000.10.10)
 *
*/


using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;

namespace MSPlus.Web.UI.Design.WebControls
{
    
/// <summary>
    
/// ButtonDesigner 的摘要说明。
    
/// </summary>

    public class ButtonDesigner:System.Web.UI.Design.ControlDesigner
    
{
        
public ButtonDesigner()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
protected override void PostFilterProperties( IDictionary Properties )
        
{
            Properties.Remove( 
"Height" );
            Properties.Remove( 
"BackColor" );
            Properties.Remove( 
"BorderWidth" );
            Properties.Remove( 
"Font" );
            Properties.Remove( 
"ForeColor" );
            Properties.Remove( 
"TabIndex" );
            Properties.Remove( 
"ToolTip" );
            Properties.Remove( 
"Enabled" );
            Properties.Remove( 
"EnableViewState" );
        }


    }

}

注:这个方法只是屏蔽设计时的属性,但对于在代码文件通过智能提示的属性值是无法移除的(目前好像是没有办法作到)

如果大家有控件开发上的问题,也可以在我的主页上留言.

posted on 2004-08-23 09:46 Mack.Z 阅读(3401) 评论(16)  编辑 收藏

评论

#1楼  2004-08-23 10:11 dudu      
看来博客园需要增加留言本的功能。
  回复  引用  查看    

#2楼  2004-08-23 11:14 耳东 [未注册用户]
非常感谢这么快就回复我的发言!这么几年上网还是第一次这么快!

看了你的回复,收获很大!你这些都是从哪里学来的!可不可以介绍一下!

我按照你讲的做了个例子,属性的确在“属性”工具栏不出现了,但是在代码文件中还是可以通过智能提示看到,也就是说这些属性还是被继承下来,怎么才能把它屏蔽了,不提供该属性??谢谢!!
  回复  引用    

#3楼  2004-08-23 12:47 polaris      
本人在开发一个复合控件过程中存在一个问题,向您请教。
某复合控件中包含一个ListBox服务器子控件,该子控件的数据是通过在Page_load中绑定上去的。整个控件呈现到客户端之后,通过客户端脚本对该ListBox子控件的项,进行了操作,例如删除、修改。但是当页面提交之后(通过Button),返回的结果中无法保存对ListBox处理的结果。
目前,我想让客户端处理的结果在页面提交之后,再次呈现在客户端时能够保存下来,不知道该如何处理?
  回复  引用  查看    

#4楼  2004-08-23 12:49 polaris      
如果可能,请给通过邮件告知您的邮箱地址。
我的email是tom_polaris@tom.com
  回复  引用  查看    

#5楼  2004-08-23 15:17 飞叶 [未注册用户]
只需要设置Browseable属性为false就可以坐在在设计时屏蔽掉
  回复  引用    

#6楼  2004-08-24 09:22 Ninputer [未注册用户]
同一飞叶,主要加[Browseable(False)]即可达到相同效果。通常的做法是:
1。继承控件。用覆盖(new in C#, Shadows in VB)的方法重写原属性,并取消其中的功能(保持新属性代码为空)。
2。加Browseable属性在设计时屏蔽
3。加HideModule属性在智能感知中屏蔽(仅对VB,对C#无效)
  回复  引用    

#7楼  2004-08-24 16:01 juqiang      
智能提示,有一个笨办法,:D

修改你的framework\v1.X目录下面的xml文件,那里存放着所有的提示信息。呵呵
  回复  引用  查看    

很明显嘛,Designer就是指设计时的东西,怎么能对代码起作用呢?
  回复  引用    

#9楼  2004-09-03 16:09 求助 [未注册用户]
麻烦帮忙看看这个控件设计的问题:
http://community.csdn.net/Expert/topic/3287/3287527.xml?temp=.11607
  回复  引用    

#10楼  2004-09-15 13:48 dayday [未注册用户]
那如果只想隐藏Font的Bold呢?
  回复  引用    

#11楼  2005-03-28 23:36 iret      
为组件的属性添加这两个attributes 就可以了,不必要那么复杂。
例如:
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public override Image BackgroundImage
{
get
{
return base.BackgroundImage;
}
set
{
base.BackgroundImage = value;
}
}

  回复  引用  查看    

我现在为控件添加了一个属性。项目编译后,运行时,通过客户端角本就访问不到这个属性了。应该怎么做处理。
  回复  引用    

#13楼  2005-10-25 10:10 czhenq [未注册用户]
继承自Controls
  回复  引用    

#14楼  2006-04-03 16:12 wubike [未注册用户]
请教高手,我写的winform程序,用上面的方法控制服务类如下。没有起作用
class PropertiesManager:System.Windows.Forms.Design.ControlDesigner
{


//重写移除无用属性
protected override void PostFilterProperties(System.Collections.IDictionary properties)
{

properties.Remove("AcceptsReturn");
properties.Remove("AcceptsTab");

}
}

用下面的方法是可以的,
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public override Image BackgroundImage
{
get
{
return base.BackgroundImage;
}
set
{
base.BackgroundImage = value;
}
}

但是我要重写许多属性,大部分都不需要用,有些属性没有公开重写不了。 请教有没有别办法重写属性。
  回复  引用    

#15楼  2008-03-09 21:23 vage [未注册用户]
PreFilterProperties 还是 PostFilterProperties
我看得怎么是PostFilterProperties?
  回复  引用    

#16楼  2008-03-09 21:23 vage [未注册用户]
--引用--------------------------------------------------
vage: PreFilterProperties 还是 PostFilterProperties
我看得怎么是PostFilterProperties?
--------------------------------------------------------

我看得是PreFilterProperties

  回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-08-23 14:48 编辑过