5

Je suis sur le bord de la folie ...Interaction entre deux contrôles utilisateur

Dans l'application, je suis en fait la construction, je fais face à deux contrôles dynamiquement ajoutés qui ont besoin d'interagir les uns avec les autres, mais j'ai réduit le problème à un exemple as-simple-as-I-can-make-it avec les contrôles étant chargés statiquement, et il présente toujours le même problème: une exception NullReferenceException lors de l'appel du délégué. Voici l'essentiel:

contrôle 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 

Contrôle 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 

Si je mets un point d'arrêt sur la ligne de Control2 où le délégué Control1 est affecté, je peux l'étape à travers et regardez-le se mettre dans l'objet Control1. Toutefois, lorsque l'événement btnButton_Click se déclenche, la valeur de _delClicked est retournée à Nothing.

Toute aide serait grandement appréciée. Merci!

Répondre

2

Je dirais que vous perdez le contrôle sur le postback. Un contrôle ajouté dynamiquement est perdu sur la publication. Bien sûr, vous recréerez un contrôle qui fait la même chose, mais cela ne signifie pas que vous allez être capable d'attraper l'événement click. Mais le contrôle n'a pas son état de view reporté entre les publications.

Voir cette article sur la façon de s'y prendre

0

Mettre cela en Page_Init()

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

Vous avez raison, il devrait être à l'init au lieu de la charge, mais il a toujours le même résultat. – Blumer

Questions connexes