【问题标题】:Over ridding Methods in User control覆盖用户控件中的方法
【发布时间】:2012-03-29 07:39:25
【问题描述】:

您好,我有一个包含按钮的用户控件。我想在单击该按钮时覆盖自定义功能,例如

 Protected Sub btnUploadSpreadSheet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUploadSpreadSheet.Click
  MyMethod()
End Sub

  Public Overridable Sub MyMethod()
    ' this i want to over ride
    End Sub

在我尝试超越时添加了控制的页面中

Protected Overrides Sub MyMethod ()

End Sub

在基类中没有找到那个 sub。

【问题讨论】:

    标签: asp.net vb.net user-controls overriding


    【解决方案1】:

    那是因为该页面不是您的UserControl 的子页面(您的页面不继承自它),无论如何这是错误的方法。查找“Visual Basic 中的继承”:http://msdn.microsoft.com/en-us/library/5x4yd9d5%28v=vs.90%29.aspx

    您显然想要的是在您的页面中处理自定义 UserControl 的事件:

    您的用户控件:

    Class ExcelSheetUploader
        Inherits UserControl
        Public Event Uploaded(ctrl As ExcelSheetUploader)
    
        Protected Sub btnUploadSpreadSheet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUploadSpreadSheet.Click
            RaiseEvent Uploaded(Me)
        End Sub
    End Class
    

    现在你可以在你的页面中处理它了:

    Protected Sub ExcelSheetUploader_Uploaded(ctrl As ExcelSheetUploader) Handles ExcelSheetUploader1.Uploaded
        ' Do something .... '
    End Sub
    

    MSDN: RaiseEvent

    【讨论】:

    • 谢谢它的工作,但我的意思是我想传递一个数据集并进入这个方法 Protected Sub ExcelSheetUploader_Uploaded(ctrl As ExcelSheetUploader) Handles ExcelSheetUploader1.Uploaded '做点什么......' End Sub /跨度>
    • 然后将公共属性添加到 DataSet 类型的 UserControl。然后你可以获取/设置这个属性。但请注意,它不会在回发后继续存在。
    • @Syed:您可以传递数据集,因为我正在将枚举传递给我的事件,以便按操作类型进行特定更改..
    【解决方案2】:

    您不能这样做,因为您的页面没有扩展用户控件。只有在这种情况下,您的实施才合适

    【讨论】:

    • 那我该如何实现 Override on button click 事件呢?或任何其他方式来实现功能?
    • 例如你可以实现自己的事件
    【解决方案3】:

    如果某些类,您不能直接覆盖方法或属性 (例如页面)不继承您的自定义类(控件)。如果你想 在页面上的某些事件上执行某些功能或单击按钮然后 在 UserControl 上创建引发某些事件的公共方法或 执行一些代码。

    注意 - 必须遵循页面 - 生命周期。

    查看这个可能有助于理解的小代码sn-p。

    Private Class MyControl
        Inherits NavronChartControl.UserControls.MyControlBase
    
        Protected Overrides Sub OnChartTypeChanged(chartType As UserControls.ChartType)
            MyBase.OnChartTypeChanged(chartType)
        End Sub
    
    ///Call this OnChartTypeChanged(...) using some method 
    /// Or Create your public methods for your functionality
    
    
    End Class
    

    ///父控件方法

    'OnChartTypeChanged is method that raise the event with argument
    
    Protected Overridable Sub OnChartTypeChanged(chartType As ChartType)
        'ChartTypeChang is an Event
        RaiseEvent ChartTypeChanged(chartType)
    End Sub
    

    检查Programming ASP.NET- Custom and User Controls在 VB.NET 中处理事件部分。

    MSDN - Raising an Event - 您可以创建自己的自定义事件参数,其中包含您希望通过事件传递的一些数据。例如e.X

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2020-05-15
      相关资源
      最近更新 更多