動態建立控制項的正確方法
很多 ASP.NET 初學者對於在 Web Form 動態建立控制項的問題困擾,常見到的問題是為何動態建立的控制項無法像拖曳到畫面上的控制項有一樣的效果,例如無法載入 ViewState 的資料 (無法呈現更新的值) 及動態控制項事件處理等等問題。
以下這個範例就是說明如何在 Web Form 上動態建立一個 TextBox 及 Button 控制項,並處理 Button 的 Click 事件。
以下為《VB》原始碼 開新視窗複製到剪貼簿列印出來?
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim oTextBox As New TextBox()
Dim oButton As New Button()
oTextBox.ID = "myTextBox"
oTextBox.Text = "AAA" 'TextBox的初始值為 AAA
Me.Form.Controls.Add(oTextBox)
oButton.ID = "myButton"
oButton.Text = "按鈕"
Me.Form.Controls.Add(oButton)
'將 Button 的 Click 事件導向 Button_Click 函式
AddHandler oButton.Click, AddressOf Button_Click
End Sub
'Button 的 Click 事件導向函數
Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim oTextBox As TextBox = Nothing
oTextBox = CType(Me.FindControl("myTextBox"), TextBox)
If oTextBox IsNot Nothing Then
oTextBox.Text = "BBB"
End If
End Sub
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init Dim oTextBox As New TextBox() Dim oButton As New Button() oTextBox.ID = "myTextBox" oTextBox.Text = "AAA" 'TextBox的初始值為 AAA Me.Form.Controls.Add(oTextBox) oButton.ID = "myButton" oButton.Text = "按鈕" Me.Form.Controls.Add(oButton) '將 Button 的 Click 事件導向 Button_Click 函式 AddHandler oButton.Click, AddressOf Button_Click End Sub 'Button 的 Click 事件導向函數 Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim oTextBox As TextBox = Nothing oTextBox = CType(Me.FindControl("myTextBox"), TextBox) If oTextBox IsNot Nothing Then oTextBox.Text = "BBB" End If End Sub
為何要在 Init 事件中就動態建立控制項,而不是在 Load 事件中呢?主要的原因是 Init 事件在 LoadViewState 之前發生,而 Load 事件是在 LoadViewState 之後。你要在 LoadViewState 之前就把控制項準備好,機制才能由 ViewState 中載入更新控制項的屬性值。
本文章來自於神魂顛倒論壇 http://bbs.flash2u.com.tw
原文網址:http://bbs.flash2u.com.tw/dispbbs_58_85781_2.html
http://bbs.flash2u.com.tw/dispbbs_58_85781_2.html
以下這個範例就是說明如何在 Web Form 上動態建立一個 TextBox 及 Button 控制項,並處理 Button 的 Click 事件。
以下為《VB》原始碼 開新視窗複製到剪貼簿列印出來?
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim oTextBox As New TextBox()
Dim oButton As New Button()
oTextBox.ID = "myTextBox"
oTextBox.Text = "AAA" 'TextBox的初始值為 AAA
Me.Form.Controls.Add(oTextBox)
oButton.ID = "myButton"
oButton.Text = "按鈕"
Me.Form.Controls.Add(oButton)
'將 Button 的 Click 事件導向 Button_Click 函式
AddHandler oButton.Click, AddressOf Button_Click
End Sub
'Button 的 Click 事件導向函數
Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim oTextBox As TextBox = Nothing
oTextBox = CType(Me.FindControl("myTextBox"), TextBox)
If oTextBox IsNot Nothing Then
oTextBox.Text = "BBB"
End If
End Sub
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init Dim oTextBox As New TextBox() Dim oButton As New Button() oTextBox.ID = "myTextBox" oTextBox.Text = "AAA" 'TextBox的初始值為 AAA Me.Form.Controls.Add(oTextBox) oButton.ID = "myButton" oButton.Text = "按鈕" Me.Form.Controls.Add(oButton) '將 Button 的 Click 事件導向 Button_Click 函式 AddHandler oButton.Click, AddressOf Button_Click End Sub 'Button 的 Click 事件導向函數 Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim oTextBox As TextBox = Nothing oTextBox = CType(Me.FindControl("myTextBox"), TextBox) If oTextBox IsNot Nothing Then oTextBox.Text = "BBB" End If End Sub
為何要在 Init 事件中就動態建立控制項,而不是在 Load 事件中呢?主要的原因是 Init 事件在 LoadViewState 之前發生,而 Load 事件是在 LoadViewState 之後。你要在 LoadViewState 之前就把控制項準備好,機制才能由 ViewState 中載入更新控制項的屬性值。
本文章來自於神魂顛倒論壇 http://bbs.flash2u.com.tw
原文網址:http://bbs.flash2u.com.tw/dispbbs_58_85781_2.html
http://bbs.flash2u.com.tw/dispbbs_58_85781_2.html
留言