【问题标题】:asp.net vb user control raising an event on the calling pageasp.net vb 用户控件在调用页面上引发事件
【发布时间】:2010-04-07 17:39:13
【问题描述】:

我正在尝试了解用户控件。我创建了一个具有文本框和按钮的用户控件。我想做的是当我单击用户控件中的按钮时,在 aspx 页面中填充一个标签。我知道我可以只在页面上有一个按钮,它使用用户控件上的某些属性来获取该信息。但我想知道如何使用用户控件的按钮来做到这一点。原因是该按钮只是一个示例.. 一个学习工具。如果我能让这个工作,我可能会将可能需要这种传递信息的东西放在用户控件中。无论如何..我发现了一些我试图作为 vb 工作的 c# 示例..但是一旦开始进入代表和事件..好吧..它让我转向这篇文章。

无论如何..希望有人可以伸出援助之手。

【问题讨论】:

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


    【解决方案1】:

    看看this tutorial 是否可以提供帮助。做到这一点的最好方法肯定是连接一个事件,这并不像你想象的那么难。基础是:

    1。在你的控件类中定义一个事件:

    Public Event MyEvent as System.EventHandler

    2。在控件类的子类或函数中引发事件:

    RaiseEvent MyEvent(Me, New EventArgs())

    3。处理包含您的控件的页面上的事件:

    Protected Sub MyControl_MyEvent(ByVal sender As Object, ByVal e As EventArgs) Handles MyControl.MyEvent
        'Do stuff here
    End Sub
    

    【讨论】:

    • 感谢您提供的信息.. 想知道.. 既然您有这么好的和简单的方法.. 您如何在活动中传递信息.. 或者是在活动时被解雇(你的'在这里做事)我会从用户控件上设置的属性中获取值
    • 如果你想在事件中传回信息,你应该改变你的“RaiseEvent”代码来传回除new EventArgs()之外的东西。为简单起见,您甚至可以传递一个字符串,如下所示:RaiseEvent MyEvent(Me, MyString),然后将页面上 MyControl_MyEvent 子的第二个参数更改为类似于 ByVal s As String 而不是 ByVal e As EventArgs。你可以在活动中传递任何你想要的东西。我只使用了 EventArgs,因为这是一种常用的方法(大多数人使用他们自己的继承自 EventArgs 的类)。
    • 刚刚经历了这个。如果您在页面上有用户控件,然后决定添加事件,您将希望从主机页面中删除用户控件并将其添加回来。至少在 VB 中,控件声明似乎不够聪明,无法在声明后添加 WITHEVENTS。很好的答案。
    【解决方案2】:

    我相信您想要做的是让您的 UserControl 引发一个事件。 This MSDN article explains how to raise events 并有 VB 示例。然后您的页面可以订阅您的 UserControl 引发的事件并设置您需要设置的任何值。最好将您的一些 UserControl 字段(即 TextBox 等)公开为公共属性,以便可以从订阅的控件访问它们。

    【讨论】:

      【解决方案3】:

      问题在于,如果你让用户控件依赖于它的父页面,它就不再是可移植的,而且你一开始就违背了将它变成用户控件的目的。

      这可能就是为什么您在任何示例中都跨委托和诸如此类运行的原因 - 人们试图通过允许用户控件调用传入的方法来删除对父页面的依赖,而不是直接在父页面。

      如果这只是为了练习,您最好按下父页面上的按钮来在用户控件中设置标签,而不是相反。你现在这样做的方式不是一个好的设计,应该避免在实际应用中使用。

      【讨论】:

      • 我正在为用户控件考虑的一件事.. 有一个多组合框可以自动提示,可以在多个地方使用.. 用户选择的最后一项是我想要的值。它相当投入,不想复制和粘贴那么多代码或混乱。所以认为用户控件会很好用。问题是,一旦选择了该值,我希望不必让用户单击按钮即可将值返回到页面......在你所说的范围内......你会采取什么方法。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2016-02-09
      相关资源
      最近更新 更多