5

私は狂気の危機に瀕しています...

私が実際に構築しているアプリケーションでは、相互に対話する必要がある 2 つの動的に追加されたコントロールを扱っていますが、問題を可能な限り単純な例に減らしました。コントロールが静的に読み込まれ、デリゲートを呼び出すときに 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 に戻ります。

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

2

私の推測では、ポストバックの制御を失っていると思います。動的に追加されたコントロールがポストバックで失われます。確かに、同じことを行うコントロールを再作成しますが、それはクリック イベントをキャッチできるという意味ではありません。ただし、コントロールには、ポストバック間で引き継がれるビューステートがありません。

これを行う方法については、この記事を参照してください

于 2009-06-18T17:46:50.617 に答える
0

これを Page_init() に入れます

Dim delChangeLabel As New ChangeLabel(AddressOf UpdateLabel) 
Me.Control1.UpdateLabel = delChangeLabel
于 2009-06-18T17:09:52.090 に答える