怎样封装控件

1.WebResource
  获取一个字符串,该字符串包含由 WebResourceAttribute 类所引用的资源的名称。

[assembly: WebResource(  " Aerolite.Resources.Js.SearchTextBox.js " " application/x-javascript "  )]
[assembly: WebResource( 
" Aerolite.Resources.Js.MenuCommon.js " " application/x-javascript "  )]

2.TagPrefix
  定义在网页中用于标识自定义控件的标记前缀。
[assembly: TagPrefix(  " Aerolite.Web.WebControls " " arl "  )]

3.ToolboxData
 指定当从MS等工具的工具箱拖动自定义控件时为它生成的默认标记
  [ToolboxData(  " <{0}:SearchTextBox runat=server /> "  )]

4.ParseChildren
  定义可在开发asp.net服务器控件时使用的元数据属性
 [ParseChildren(  true  )] 

5.Bindable
  指示成员是否用于绑定
6.Themeable
  获取一个值,该值指示当前控件或控件的成员是否受 Web 应用程序中定义的主题和控件外观影响。
7.Browsable
  获取一个值,该值指示此对象是否可浏览。是否显示在“属性”窗口中。
 [Bindable(  true  ), Themeable(  false  ), Browsable(  true  )] 

8.Category
  指定当属性或者事件显示在一个设置为"按分类顺序"模式的System.Windows.Forms.PropertyGrid控件中时,用于给属性或事件分组的类别的名称。
9.DefaultValue
  属性的默认值
10.Localizable
  属性是否应本地化.
   [Category(  " Data "  )]  
    [DefaultValue( 
" App_Code "  )]
    [Localizable( 
true  )]

上面是一些属性的设置,下面附封装google suggest控件的代码。

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Text;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.IO;

// 引用两个js文件,该js文件是生成该控件的
[assembly: WebResource(  " Aerolite.Resources.Js.SearchTextBox.js " " application/x-javascript "  )]
[assembly: WebResource( 
" Aerolite.Resources.Js.MenuCommon.js " " application/x-javascript "  )]

// 定义在网页中的标记前缀为arl
[assembly: TagPrefix(  " Aerolite.Web.WebControls " " arl "  )]

namespace  Aerolite.Web.WebControls
{
  
/// <summary>
  
/// 一个可以异步传输已进行右模糊搜索的文本输入框
  
/// </summary>  


  
// 指定当从工具箱拖动时为它生成的默认标记 
  [ToolboxData( "<{0}:SearchTextBox runat=server />" )]

  
//定义开发服务器控件时使用的元数据属性
  [ParseChildren( true )]

  
//定义一个属性
  [PersistChildren( false )]
  
public class SearchTextBox : System.Web.UI.WebControls.TextBox, System.Web.UI.ICallbackEventHandler
  
{
    
/// <summary>
    
/// 获取或设置提供搜索结果的类的全名
    
/// </summary>

    [Bindable( true ), Themeable( false ), Browsable( true )]
    [Category( 
"Data" )]
    [DefaultValue( 
"" )]
    [Localizable( 
true )]
    
public string DataSourceFullName
    
{
      
get
      
{
        
return (ViewState["DataSourceFullName"== null? "" : (string) ViewState["DataSourceFullName"];
      }

      
set
      
{
        ViewState[
"DataSourceFullName"= value;
      }

    }


    
/// <summary>
    
/// 获取或设置提供搜索结果的类所在程序集的名称
    
/// </summary>                              

    [Bindable( true ), Themeable( false ), Browsable( true )]   
    [Category( 
"Data" )]  
    [DefaultValue( 
"App_Code" )]
    [Localizable( 
true )]
    
public string DataSourceAssembly
    
{
      
get
      
{
        
return (ViewState["DataSourceAssembly"== null? "App_Code" : (string) ViewState["DataSourceAssembly"];
    
      }

      
set
      
{
        ViewState[
"DataSourceAssembly"= value;
      }

    }


    
/// <summary>
    
/// 获取或设置提供搜索结果的方法的名称。
    
/// </summary>

    [Bindable( true ), Themeable( false ), Browsable( true )]
    [Category( 
"Data" )]
    [DefaultValue( 
"" )]
    [Localizable( 
true )]
    
public string GetDataMethod
    
{
      
get
      
{
        
return (ViewState["GetDataMethod"== null? "" : (string) ViewState["GetDataMethod"];
      }

      
set
      
{
        ViewState[
"GetDataMethod"= value;
      }

    }


    
private object _DataSource;
    [Bindable( 
true ), Themeable( false ), Browsable( false )]
    
public object DataSource
    
{
      
get
      
{
        
if ( _DataSource == null )
        
{
          OnDataSourceCreating();
        }

        
return _DataSource;
      }

      
set
      
{
        _DataSource 
= value;

        Properties.Resources;
      }


     
    }


    
public delegate void DataSoucreEventHandler( SearchTextBox sender );

    [Bindable( 
false ), Browsable( false )]
    
public event DataSoucreEventHandler DataSourceCreating;

    
protected virtual void OnDataSourceCreating()
    
{
      
if ( DataSourceCreating != null )
      
{
        DataSourceCreating( 
this );
      }

      
else
      
{
        _DataSource 
= System.Type.GetType( DataSourceFullName + "," + DataSourceAssembly ).InvokeMember( "", System.Reflection.BindingFlags.CreateInstance, nullnullnull );
      }

    }


    
/// <summary>
    
/// 定义用于获取搜索上下文菜单项的方法
    
/// </summary>
    
/// <param name="searchKey">搜索框中输入的部分关键字</param>
    
/// <returns>构成上下文菜单的项</returns>

    public delegate string[] GetSearchResultMethod( string searchKey );

    
private GetSearchResultMethod _getResult;
    
/// <summary>
    
/// 设置用于获取搜索上下文菜单项的方法
    
/// </summary>

    [Bindable( false ), Themeable( false ), Browsable( false )]
    
public GetSearchResultMethod GetResultMethod
    
{
      
set
      
{
        
if ( value == null )
          
throw new ArgumentNullException( "value" );
        _getResult 
= value;
      }

    }


    
private string[] _GetResult( string searchKey )
    
{
      
if ( _getResult == null )
        
return GetResult( searchKey );
      
else
        
return _getResult( searchKey );
    }



    
/// <summary>
    
/// 获取搜索上下文菜单项
    
/// </summary>
    
/// <param name="searchKey">搜索框中输入的部分关键字</param>
    
/// <returns>构成上下文菜单的项</returns>

    protected virtual string[] GetResult( string searchKey )
    
{
      
return FormatResult( DataSource.GetType().InvokeMember( GetDataMethod, System.Reflection.BindingFlags.InvokeMethod, null, DataSource, new object[] { searchKey } ) ).Split( ',' );
    }


    
protected override void OnPreRender( EventArgs e )
    
{
      
base.OnPreRender( e );
      
      Page.ClientScript.RegisterClientScriptResource( 
typeof( SearchTextBox ), "Aerolite.Resources.Js.MenuCommon.js" );
      Page.ClientScript.RegisterClientScriptResource( 
typeof( SearchTextBox ), "Aerolite.Resources.Js.SearchTextBox.js" );

    }


    
protected override void Render( HtmlTextWriter writer )
    
{
      
base.Render( writer );
      writer.Write( 
"<script language=/"javascript/">/n" );
      writer.Write( 
"  var " + this.ClientID + "Menu=new searchTextBox();/n" );
      writer.Write( 
"  " + this.ClientID + "Menu.parentObj=document.getElementById(/"" + this.ClientID + "/");/n" );      
      writer.Write( 
"  " + this.ClientID + "Menu.bindingEvent();/n" );
      writer.Write( 
"  " + this.ClientID + "Menu.callBack=function(){/n" + Page.ClientScript.GetCallbackEventReference( this"this.parentObj.value""this.getCallBackResult"null ) + ";/n};/n" );                
      writer.Write( 
@"</script>" );
    }


    
protected virtual string FormatResult( object result )
    
{
      
string temp = "";
      
if ( result is string )
      
{
        
return result.ToString();
      }

      
else if ( result is System.Collections.IEnumerable )
      
{
        
foreach ( object i in (System.Collections.IEnumerable) result )
        
{
          temp 
+= "," + i.ToString();
        }

        
if ( temp != "" ) temp = temp.Substring( 1 );
      }

      
else if ( result is System.Data.DataTable )
      
{
        
foreach ( System.Data.DataRow i in ((System.Data.DataTable) result).Rows )
        
{
          temp 
+= "," + i[0].ToString();
        }

        
if ( temp != "" ) temp = temp.Substring( 1 );
      }

      
return temp;
    }


    
//异步回调
    ICallbackEventHandler 成员
  }

}

 

来自 http://www.cnblogs.com/ustbwuyi/archive/2006/08/14/476671.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值