5

Sono sull'orlo della follia ...Interazione tra due controlli utente

Nell'applicazione realtà sto costruendo, ho a che fare con due controlli dinamicamente aggiunto che hanno bisogno di interagire con l'altro, ma ho ridotto il problema a un esempio as-simple-as-can-it-it con i controlli caricati staticamente e presenta ancora lo stesso problema: una NullReferenceException quando si richiama il delegato. Ecco il succo del discorso:

controllo 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 

controllo 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 

Se metto un punto di interruzione sulla linea di Control2 in cui viene assegnato il delegato Control1, posso passo attraverso e guardarlo settare nell'oggetto Control1. Tuttavia, quando si attiva l'evento btnButton_Click, il valore di _delClicked è tornato a Nothing.

Qualsiasi aiuto sarebbe molto apprezzato. Grazie!

risposta

2

La mia ipotesi è che si stanno perdendo il controllo sul postback. Un controllo aggiunto in modo dinamico viene perso nel postback. Sicuro di ricreare un controllo che fa la stessa cosa, ma ciò non significa che riuscirai a catturare l'evento click. Ma il controllo non ha il suo stato di visualizzazione riportato tra i postback.

Vai a questa article su come andare a fare questo

0

Mettere questo in Page_Init()

Dim delChangeLabel As New ChangeLabel(AddressOf UpdateLabel) 
Me.Control1.UpdateLabel = delChangeLabel 
+0

Hai ragione, dovrebbe essere in init invece di carico, ma ha ancora lo stesso risultato. – Blumer

Problemi correlati