自定义服务器控件ImageButton
?
?
???? 在日常項(xiàng)目開發(fā)中,我們會經(jīng)常用到自定義控件,我們通過一個(gè)簡單的例子來說明,在日常項(xiàng)目中我們經(jīng)常會用到圖片,或者圖片控件,我們以ImageButton為例來說明。
<asp:ImageButton ID="imgbtn" runat="server" ImageUrl="~/Images/Add.png" />?
很多時(shí)候我們需要在很多頁面上放上面這段代碼,每次都要重復(fù)設(shè)置ImageUrl 當(dāng)圖片路徑換了。或者圖片名稱換了,我們需要替換很多地方。有沒有更簡單的方法呢,使用自定義控件。在項(xiàng)目中我們經(jīng)常使用一些添加 刪除,修改的按鈕圖片 來代替按鈕。我們以此為例來說明。
????1、創(chuàng)建一個(gè)類庫項(xiàng)目,或者web控件庫項(xiàng)目都可以,添加一個(gè)類(Class)。繼承ImageButton
public class CustImageButton : ImageButton{}?
2、我們在同一個(gè)項(xiàng)目中,一般使用的圖片大多是一樣的。比如添加 刪除,這些按鈕圖片。那么我們在定義一個(gè)枚舉 用于區(qū)分不同的圖片,我們定義了四種類型 添加 修改 查看 刪除
?????
public enum CustImageType{Add,Edit,View,Delete}?
3、定義一個(gè)屬性,用于設(shè)定 圖片的類型
[Bindable(true)][Category("Appearance")][DefaultValue(CustImageType.Add)][Localizable(true)]public CustImageType ImageType{get{return ViewState["ImageType"] == null ? CustImageType.Add : (CustImageType)ViewState["ImageType"];}set{ViewState["ImageType"] = value;}}我們定義了一個(gè)自定義的屬性ImageType,類型是CustImageType枚舉類型。為了便于在控件的屬性窗口顯示,我們設(shè)置了幾個(gè)特性
?
[Bindable(true)] 指定成員是否通常用于綁定[Category("Appearance")] 指定當(dāng)屬性或事件顯示在一個(gè)設(shè)置為“按分類順序”模式的 System.Windows.Forms.PropertyGrid 控件中時(shí),用于給屬性或事件分組的類別的名稱[DefaultValue(CustImageType.Add)] 指定屬性的默認(rèn)值[Localizable(true)] 指定屬性是否應(yīng)本地化4、重寫ImageButton控件的Render方法
protected override void Render(HtmlTextWriter writer){switch (ImageType){ case CustImageType.Add:this.ImageUrl = this.ResolveUrl("~/Images/Add.png");break;case CustImageType.Edit:this.ImageUrl = this.ResolveUrl("~/Images/Edit.png");break;case CustImageType.Delete:this.ImageUrl = this.ResolveUrl("~/Images/delete.png");break;case CustImageType.View:this.ImageUrl = this.ResolveUrl("~/Images/View.png");break;}base.Render(writer);}?
在頁面中引用如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebDemo1.Index" %><%@ Register Assembly="CustControl" Namespace="CustControl" TagPrefix="cc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"><title></title> </head> <body><form id="form1" runat="server"><div><cc1:CustImageButton ID="CustImageButton1" ImageType="View" runat="server" /></div></form> </body> </html>運(yùn)行效果
?
換成如下代碼
<cc1:CustImageButton ID="CustImageButton1" ImageType="Edit" runat="server" />
顯示
可以看出 非常方便,只需要在屬性窗口設(shè)置 ImageType 就可以輕松實(shí)現(xiàn)圖片顯示。
但是這樣也有一個(gè)問題,我們使用的ImageUrl的路徑是我們web項(xiàng)目中的路徑,當(dāng)我們的路徑改了,或者圖片換了,我們?nèi)匀恍枰貜?fù)的去修改程序,而且每次引用這個(gè)控件 我們都需要在web項(xiàng)目中添加對應(yīng)路徑的圖片,非常麻煩,有木有更好的方法呢,當(dāng)然 那就是使用嵌入的資源這是.NET2.0開始引入的。
我們在我們的控件項(xiàng)目中添加剛才用到的4張圖片。
選中其中一張圖片右鍵點(diǎn)擊屬性 把生成操作類型改成嵌入的資源
?
然后在我們的應(yīng)用程序集文件中添加
?
添加如下代碼
[assembly: WebResource("CustControl.Images.Add.png", "img/png")] [assembly: WebResource("CustControl.Images.delete.png", "img/png")] [assembly: WebResource("CustControl.Images.Edit.png", "img/png")] [assembly: WebResource("CustControl.Images.View.png", "img/png")]CustControl是命名空間,Images是文件夾名稱后面是圖片,用.分隔
接下來就是我們?nèi)绾卧诔绦蛑性L問這些圖片了。
.net提供了訪問web資源文件的類和方法,我們這地方使用
Page.ClientScript.GetWebResourceUrl方法來訪問
所以我們修改Render方法中的代碼為:
protected override void Render(HtmlTextWriter writer){switch (ImageType){case CustImageType.Add://Page.ClientScript.GetWebResourceUrl()獲取對程序集內(nèi)資源的 URL 引用this.ImageUrl = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "CustControl.Images.Add.png");break;case CustImageType.Edit:this.ImageUrl = this.Page.ClientScript.GetWebResourceUrl(this.GetType(),"CustControl.Images.Edit.png");break;case CustImageType.Delete:this.ImageUrl = this.Page.ClientScript.GetWebResourceUrl(this.GetType(),"CustControl.Images.delete.png");break;case CustImageType.View:this.ImageUrl = this.Page.ClientScript.GetWebResourceUrl(this.GetType(),"CustControl.Images.View.png");break;}base.Render(writer);}?
在頁面不需要引入圖片 使用效果也是一樣。很方便吧,試試吧!
?
直接上代碼:
?
DownLoad
轉(zhuǎn)載于:https://www.cnblogs.com/suizhouqiwei/archive/2012/07/31/2616589.html
總結(jié)
以上是生活随笔為你收集整理的自定义服务器控件ImageButton的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 行内元素和块状元素一览表
- 下一篇: 本地化ASPXPivotGrid控件