【问题标题】:Interaction between two user controls两个用户控件之间的交互
【发布时间】:2009-06-18 17:05:06
【问题描述】:

我正处于疯狂的边缘......

在我实际构建的应用程序中,我正在处理需要相互交互的两个动态添加的控件,但我已将问题简化为尽可能简单-它是静态加载控件的示例,但它仍然存在相同的问题:调用委托时出现 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。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: asp.net vb.net user-controls delegates nullreferenceexception


    【解决方案1】:

    我的猜测是您正在失去对回发的控制。动态添加的控件在回发时丢失。当然,您重新创建了一个执行相同操作的控件,但这并不意味着您将能够捕获单击事件。但是控件没有在回发之间传递它的视图状态。

    请参阅此article,了解如何执行此操作

    【讨论】:

      【解决方案2】:

      把这个放到Page_init()中

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

      【讨论】:

      • 你说得对,应该是在init而不是load,但结果还是一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多