在Web開發的過程中難免會動態去產生一些控制項
如果這些控制項只是顯示用的到沒啥問題
不過如果是要動態生一些具有事件的控制項 要怎麼 一起產生對應的事件呢?

其實這個問題來自於我想偷懶的做法
因為其實大部分的控制項都可以在設計時期就配置好
不管是用很複雜的程式也好 用很多的判斷去控制險式或不顯示也好

但是這樣就難免造成有一堆控制物件顯示或不顯示的程式碼
(也就是沒啥功能.卻有一長串.但不好識別)
另外對效能也是個影響 畢竟Web程式是透過網路的

因此為了精簡程式 也為了方便管理 還有一點點為了效能 就去找了相關資料

C# 的動態事件指定與VB.net 不太相同
雖然都叫委派 不過 在MSDN裡面委派可是有一大篇章節 更有一堆範例 實做
不同時機使用不同類型,方法.....等

但我的目的只是解決我的問題....…因此 理論的東西就先擱著吧~~
先說再VB.net中 如果動態產生了一些控制項 如 LinkButton 同時要賦予他事件其做法如下

'動態產生10個LinkButton

For i As Integer = 1 To 10

    '動態產生LinkButton
    Dim lbtn As New LinkButton()

    '指定顯示的文字
    lbtn.ID=
"lbtn" & i
    lbtn.Text = "按鈕" & i

    '指定命令名稱引述 當作參數 在對應事件時可用來判斷
    lbtn.CommandArgument = i

    '建立事件關聯
    AddHandler lbtn.Click, AddressOf testEven  ‘
testEven 是我們要指定的事件

    '加到容器中 例如 Panel
    Panel1.Controls.Add(lbtn)

Next

'下來 處理該事件
Private Sub testEven(ByVal sender As Object, ByVal e As System.EventArgs)

        '轉換事件來源的物件 為LinkButton
        Dim newlbtn As LinkButton = CType(sender, LinkButton)

        '輸出呼叫此事件按鈕的命令引數 當然可以以此做其他處理
        Response.Write(newlbtn.CommandArgument)
       
End Sub



//接下來是C#的做法
//相同過程就不在述 例如產生控制項  指定文字 或ID 加入容器..等
//僅說明 產生對應事件的語法
lBtn.Command += new CommandEventHandler(testCommand);
//testCommand是我們要處理的事件

//事件處理函式
void pageBtn_Command(object sender, CommandEventArgs e)
{
    //取得呼叫此事件的物件參數 然後就可以做其他處理
    string strtest1 = e.CommandArgument;
   
    //或者取得物件本身
    LinkButton Lbtn = (LinkButton)sender;

   //取得參數 或命令名稱
   string strtest2 = Lbtn.CommandEventArgs ;
   string strtest3 = Lbtn.CommandName;
   //然後就可以做其他處理
}
arrow
arrow
    全站熱搜

    ADOLPH 發表在 痞客邦 留言(0) 人氣()