[英]Interaction between two user controls
我快要瘋了......
在我正在構建的應用程序中,我正在處理需要相互交互的兩個動態添加的控件,但我已經將問題簡化為一個簡單的,因為我可以制作它的示例控件是靜態加載的,它仍然存在同樣的問題:調用委托時出現NullReferenceException。 這是要點:
控制1
Partial Class Control1
Inherits System.Web.UI.UserControl
Private _delClicked As System.Delegate
Public WriteOnly Property UpdateLabel() As System.Delegate
Set(ByVal value As System.Delegate)
_delClicked = value
End Set
End Property
Protected Sub btnButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnButton.Click
Dim aObj(0) As Object
aObj(0) = 1
_delClicked.DynamicInvoke(aObj)
End Sub
End Class
控制2
Partial Class Control2
Inherits System.Web.UI.UserControl
Protected WithEvents Control1 As New Control1
Delegate Sub ChangeLabel(ByVal int As Integer)
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim delChangeLabel As New ChangeLabel(AddressOf UpdateLabel)
Me.Control1.UpdateLabel = delChangeLabel
End Sub
Private Sub UpdateLabel(ByVal int As Integer)
lblLabel.Text = "Value is now " & int
End Sub
End Class
如果我在分配了Control1委托的Control2的行上放置一個斷點,我可以單步執行並觀察它在Control1對象中的設置。 但是,當btnButton_Click事件觸發時,_delClicked的值已回到Nothing。
任何幫助將不勝感激。 謝謝!
我的猜測是你正在失去對回發的控制權。 動態添加的控件會在回發中丟失。 當然你重新創建一個控件來做同樣的事情,但這並不意味着你將能夠捕獲點擊事件。 但是控件並沒有在回發之間傳遞它的視圖狀態。
請參閱此文章 ,了解如何執行此操作
把它放在Page_init()中
Dim delChangeLabel As New ChangeLabel(AddressOf UpdateLabel)
Me.Control1.UpdateLabel = delChangeLabel
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.