【发布时间】:2023-03-13 00:56:01
【问题描述】:
我有一个包含 3 个按钮和 7 个文本框的用户控件。我正在使用 LoadControl 在我的网络表单中动态调用该用户控件。
但我的问题是
1.如何知道我的页面上点击了哪个按钮(用户控件)?
2.如何引发这些事件?
谢谢 卡维莎
【问题讨论】:
-
解释问题2,你想要一个代码示例,如果是,用什么语言(C#或VB)。
我有一个包含 3 个按钮和 7 个文本框的用户控件。我正在使用 LoadControl 在我的网络表单中动态调用该用户控件。
但我的问题是
1.如何知道我的页面上点击了哪个按钮(用户控件)?
2.如何引发这些事件?
谢谢 卡维莎
【问题讨论】:
在您的用户控件中创建事件并在单击按钮时触发它。因此,您可以从主页管理此事件。
【讨论】:
在您的用户控件 (WebUserControl1.ascx) 中,您可能有一个带有点击处理程序的 Button1,其行为如下:
Event Button1Click(ByVal button As Button)
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
RaiseEvent Button1Click(sender)
End Sub
然后您可以像这样在父控件中动态地将 EventHandler 附加到 this:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim buttonControl As WebUserControl1 = LoadControl("WebUserControl1.ascx")
AddHandler buttonControl.Button1Click, AddressOf ControlEventHandler
End Sub
Private Sub ControlEventHandler(ByVal ctl As Control)
'We now have access to this control's properties
End Sub
【讨论】:
您可以在自己的代码隐藏文件中处理用户控件上的控件事件,并在用户控件上引发事件,这些事件又可以由页面的代码隐藏文件处理。
【讨论】:
最好的办法是让用户控件将控件封装在其中,然后引发有意义的事件。例如,我编写了一个日期选择器用户控件,它有一个 RadioButtonList 可以在“过去 12 个月”、“年初至今”或“自定义日期”以及开始日期和结束日期文本框之间进行选择。我的用户控件公开了一个 DateChanged 事件,如果进行了新的单选按钮选择,或者进行了“自定义”选择并且输入日期发生了更改,则会引发该事件。
这样,控件的用户不需要知道控件的复杂实现。它只是订阅 DateChanged 事件。
【讨论】: