簡體   English   中英

兩個用戶控件之間的交互

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM