開發自定義控制項

2022-02-23 04:57:08 字數 2655 閱讀 6688

學習自定義控制項的開發不僅可以使你開發出更靈活的系統更重要的是它可以使你加深對已有伺服器控制項的理解,得以更靈活的應用。

先說一下伺服器控制項的概念吧:

所謂伺服器控制項,就是在伺服器上執行,並可以對映到所有瀏覽器支援的標準 html 標記的控制項,在你的web窗體中,凡是包含 runat="server" 屬性宣告的元素都叫做伺服器控制項(在vs.net中的設計頁面中,用乙個小小的綠色箭頭表示),你可以用原有的html元素並加上runat=」server」屬性使其變為乙個伺服器控制項,這叫做htmlcontrols,它可以直接對映到標準html標記;也可以使用.net提供的全新的webcontrols,它比前者更抽象,功能也更加強大。不管採用哪一類控制項,runat=」server」屬性都將會使你可以以程式設計方式訪問這些元素。這很容易理解,伺服器控制項就是在伺服器端執行的控制項,經過伺服器端某些程式的解析再生成標準的html**顯示在我們的瀏覽器上

在asp.net中,(傳統意義上)可供你開發的控制項實際上有兩種:custom control 和 user control。custom control 是縱向的,是對系統本身控制項的繼承和擴充,在程式中以dll檔案形式存在,user control 則是橫向的,是對系統本身控制項的組合,在系統中以.ascx為字尾名。這兩種控制項功能相同,都可以為開發人員提供可復用的視覺化ui元件,相比之下前者具有更大的靈活性,同時開發起來比較複雜,而後者容易開發,但可重用性就比較差。一般來說使用者會先用user control來開發,只有當其不堪重用的時候才轉而使用custom control。

事實上,使用者自己開發custom control並不是一件很困難的事,只需要定義乙個直接或間接從control 派生的類並重寫它的 render 方法即可,system.web.ui.control與system.web.ui.webcontrols.webcontrol兩個類是伺服器控制項的基類。 control 類定義了所有伺服器控制項共有的屬性、方法和事件。其中包括控制控制項執行生命週期的方法和事件,以及 id、uniqueid、parent、viewstate 和 controls(子控制項集合)等屬性。control 沒有使用者介面 (ui) 特定的任何功能。如果創作的控制項沒有提供 ui,或者組合了其他呈現其自己的 ui 的控制項,則從 control 派生。 webcontrol 類是從 control 派生的,並為 ui 功能提供附加的屬性和方法。這些屬性包括 forecolor、backcolor、font、borderstyle、height 和 width。webcontrol 是 asp.net 中 web 伺服器控制項系列的基類。如果控制項呈現 ui,則從 webcontrol 派生。

可以重寫從基類繼承的屬性、方法和事件,並可以將新的屬性、方法和事件新增到自定義控制項中,所前所述,我們使用重寫render方法來實現對html**的輸出。render 方法採用 system.web.ui.htmltextwriter 型別的引數。控制項要傳送到客戶端的 html 作為字串引數傳遞到 htmltextwriter 的 write 方法。下面我們使用vs.net來開發乙個簡單的自定義控制項(使用vs.net的原因是為了方便開發者除錯,在正式開發中我們經常使用的也是vs.net)。

1、首先新建乙個空白解決方案,然後為其新增兩個專案,乙個名為mycontrols的web控制項庫專案和乙個叫做web的web應用程式專案,後者用於測試我們開發出的控制項。

2、在web專案上點選右鍵,選擇依賴項,使專案web取決於mycontrols,接著再為web專案新增mycontrols的引用(編譯成的mycontrols.dll檔案後被copy到web目錄的bin資料夾下,你可以在任何地方使用這個mycontrols.dll檔案)。

3、在mycontrols專案中新增乙個web自定義控制項並命名為mycontrol.cs,接著在web專案中的webform1.aspx檔案首行新增如下**(用於向頁面註冊此控制項):

4、在標記之間新增如下**(新增此控制項到頁面上):

ok,乙個帶有text屬性的自定義控制項已經完成了,現在就可以執行它並**效果了。

這個控制項的結果僅僅是將一行文字輸出到瀏覽器並顯示出來,但是我們平時所用到的控制項,小到如label,大到如datagrid,都是基於這一原理開發出來的。接著我們看一下這個自定義控制項原始檔(mycontrol.cs)的組成。

view code

using system;

using system.web.ui;

using system.web.ui.webcontrols;

using system.componentmodel;

namespace mycontrols

:mycontrol runat=server>

")]//

類mycontrol派生自webcontrol

public

class mycontrol : system.web.ui.webcontrols.webcontrol

set }//

重寫webcontrol的render方法,採用htmltextwriter型別的引數

protected

override

void render(htmltextwriter output)

}}

現在我們略略修改一下render方法的輸出值,試著為輸出文字加上標籤span:

output.write(""+text+"");

也可以用標籤修飾文字的顯示:

output.write(""+text+"

iOS基礎開發 自定義控制項

自定義控制項,設定子控制項的尺寸和位置 當系統提供的控制項滿足不了我們的需求,我們可以自定義乙個控制項,繼承系統自帶的控制項,寫乙個屬於自己的控制項.自定義控制項的好處是可以把封裝控制項內部的細節,不容易被外界隨意修改.如果乙個view內部的子控制項比較多,一般會考慮自定義乙個view,把它內部子控...

IOS開發自定義CheckBox控制項

ios本身沒有系統的checkbox元件,但是實際開發中會經常用到,所以專門寫了乙個checkbox控制項,直接上 效果圖 uicheckboxbutton.h檔案如下 import import common.h inte ce uicheckboxbutton uicontrol uilabel...

VB開發 自定義控制項原始碼

源 如下 option explicit 自定義文字框輸入控制項 檢測使用者輸入是否為數值 private sub text1 change if isnumeric text1.text false and trim text1.text and trim text1.text then msgb...