[ASP.NET]UserControl對UserControl參數傳遞

[ASP.NET]UserControl對UserControl參數傳遞

當你有二個以上的UserControl,需要平行溝通時要如何實現。

這裡提供一個方法,給大家參考。

方法:利用物件導向特性,先建立一個介面(interface)的類別,在類別裡面定義二個interface,第一個interface主要是用來讓UserControl註冊,所以必須在裡面定義一個方法。

第二個interface主要是用來讓第一個interface呼叫使用,所以裡面也會定義一個有回傳值的方法。

因此呼叫端的UserControl只需要繼承第一個interface並且實作裡面方法,被呼叫端需繼承第二個interface並且實作裡面的方法,若UserControl是呼叫端也是被呼叫端的話,就必需二個interface都要繼承且實作。

再來在引用這二個UserControl的上層頁面或控制項,幫引用的UserControl做註冊的動作。

說這麼多或許大家還不清楚,那麼請看下面範例:

一,先建立二個UserControl,一個名稱為ucTab1另一個為ucTab2,如下圖

UserControl-1

二,然後開始布置UserControl上面的控制項,為了方便示範,因此我將二個UserControl的元件都佈置一樣,如下圖:

UserControl-2

 

 

三,ucTab1跟ucTab2都佈置完畢後,再將這個UserControl放置到Default.aspx頁面上。

如下圖:

UserControl-3

四,接下來就新增一個類別,用來定義介面(interface),類別名稱為UcToUc.cs檔。

第一個介面名稱宣告為IMain,第二個為ISub。

IMain程式區塊裡面我們在定義一個方法,方法名稱為:void RegUserControl(ISub obj);

同樣在ISub程式區塊裡面也定義一個方法,名稱為:SortedList GetControl();

需注意SortedList GetControl();是有回傳值的,回傳型態:SortedList 類別。

如下:

 

01using System.Collections;
02 
03public interface IMain
04{
05    void RegUserControl(ISub obj);
06}
07 
08public interface ISub
09{
10    SortedList GetControl();
11}

 

五,開始在ucTab1跟ucTab2的CS檔寫一樣的程式碼。

1.先繼承剛剛定義的介面(interface),IMain跟ISub。

2.宣告一個全域變數ArrayList _RegControl = new ArrayList();

這個類別的參考主要是用來紀錄,有那些控制項跟我註冊。

3.實做IMain的介面及方法,_RegControl.Add(obj);是將註冊的UserControl記錄在ArrayList 裡面。

4.實做ISub的介面及方法,這個介面的方法GetControl()是要讓對方呼叫來取得我的參數,

方法裡面我是使用SortedList類別來放要傳遞的值。

5.當Button被按下去時,會呼叫我自訂的方法ShowList(),

這個方法主要是將已經跟我註冊的Usercontrol,取得值然後設定給ListBox顯示。

至於要如何取的另一個UserControl的值,請注意這行(ISub)_RegControl[i]).GetControl()。

就是將紀錄在ArrayList裡面的UserControl取出來,

並強轉型為 ISub,因為在ISub我們有定義GetControl()的方法,

所以我們就可以利用這方法把值給取出來。

在這裡須注意到一件事,就是要註冊的UserContol都需要去繼承,ISub並實作裡面的方法。

如下圖:

UserControl-5

六,最後在Default.aspx.cs的Page_Load幫ucTab1跟ucTab2註冊。

第一行是將ucTab2註冊給ucTab1。

第二行是將ucTab1註冊給ucTab2。

01public partial class _Default : System.Web.UI.Page
02{
03    protected void Page_Load(object sender, EventArgs e)
04    {
05        this.ucTab11.RegUserControl((ISub)this.ucTab21);
06 
07        this.ucTab21.RegUserControl((ISub)this.ucTab11);
08    }
09 
10 
11}

七,好了之後我們就可以執行Default.aspx測試看看結果,先在ucTab1的欄位輸入值,

然後在ucTab2按下Button,就會把ucTab1所輸入的值帶進ucTab2的ListBox裡面。

如下圖:

UserControl-6

八,再來換在ucTab2的欄位輸入值,按下ucTab1的Button來看結果。

UserControl-7

九,最後就是這樣。

UserControl-8


我的優點就是把學過的東西給忘記,

我的缺點就是可以無限學習新事物。

水滿了要把水倒掉才可以再裝水,歸零學習。

转载于:https://www.cnblogs.com/vmyspace/archive/2012/03/01/2375706.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值