相对于 ServerControl 来说,UserControl 是相当容易上手的,利用拖曳现有控件就可以组合成复杂的控件。
一般 UserControl 的撰写方式跟页面差不多,不过 UserControl 有时需要提供一些事件,让使用这个 UserControl 的页面可以在此事件中撰写相关的程序代码,以下我们就会示范如果撰写 UserControl 的事件。
首先撰写一个 Toolbar 的 UserControl,Toolbar 上具有「首笔」、「上笔」、「下笔」、「末笔」四个按钮,当按下按钮时会引发 Click 事件,并可由事件自变量的 e.CommandName 得知那个按钮引发此事件。
Toolbar.ascx 的程序代码及画面如下
Toolbar.ascx.vb 的程序代码如下
在 Toolbar.ascx.vb中定义了 Click 事件,Click 事件自变量为 ClickEventArgs,ClickEventArgs 具有 CommandName 属性,用来识别按钮命令。当 Toolbar 按下按钮时,会进 Button_Click 事件处理函式,在此函式中取得作用按钮的 CommandName,并引发 Toolbar 的 Click 事件。
接下来就是检验成果的时候,将 Toolbar UserControl 拖曳至页面上,切换至页面的程序代码 (*.aspx.vb),在控件清单中选取 Toolbar,在右方的事件清单中,就可以看到在 Toolbar 定义的 Click 事件了。
在 Toolbar UserControl 的 Click 事件中,撰写如下程序代码,当按下按钮时就会输出对应的 CommandName。
一般 UserControl 的撰写方式跟页面差不多,不过 UserControl 有时需要提供一些事件,让使用这个 UserControl 的页面可以在此事件中撰写相关的程序代码,以下我们就会示范如果撰写 UserControl 的事件。
首先撰写一个 Toolbar 的 UserControl,Toolbar 上具有「首笔」、「上笔」、「下笔」、「末笔」四个按钮,当按下按钮时会引发 Click 事件,并可由事件自变量的 e.CommandName 得知那个按钮引发此事件。
Toolbar.ascx 的程序代码及画面如下
1<%@ Control Language="VB" AutoEventWireup="false" CodeFile="Toolbar.ascx.vb" Inherits="Toolbar" %>
2<asp:Button ID="btnMoveFirst" runat="server" CommandName="MoveFirst" Text="首筆" />
3<asp:Button ID="btnMovePrevious" runat="server" CommandName="MovePrevious" Text="上筆" />
4<asp:Button ID="btnMoveNext" runat="server" CommandName="MoveNext" Text="下筆" />
5<asp:Button ID="btnMoveLast" runat="server" CommandName="MoveLast" Text="末筆" />
2<asp:Button ID="btnMoveFirst" runat="server" CommandName="MoveFirst" Text="首筆" />
3<asp:Button ID="btnMovePrevious" runat="server" CommandName="MovePrevious" Text="上筆" />
4<asp:Button ID="btnMoveNext" runat="server" CommandName="MoveNext" Text="下筆" />
5<asp:Button ID="btnMoveLast" runat="server" CommandName="MoveLast" Text="末筆" />
Toolbar.ascx.vb 的程序代码如下
1Partial Class Toolbar
2 Inherits System.Web.UI.UserControl
3
4 ''' <summary>
5 ''' Toolbar 控制項的 Click 事件引數。
6 ''' </summary>
7 Public Class ClickEventArgs
8 Inherits System.EventArgs
9 Dim FCommandName As String = String.Empty
10
11 ''' <summary>
12 ''' 按鈕命令。
13 ''' </summary>
14 Public Property CommandName() As String
15 Get
16 Return FCommandName
17 End Get
18 Set(ByVal value As String)
19 FCommandName = value
20 End Set
21 End Property
22 End Class
23
24 ''' <summary>
25 ''' 按下工具列按鈕引發的事件。
26 ''' </summary>
27 Public Event Click(ByVal sender As Object, ByVal e As ClickEventArgs)
28
29 ''' <summary>
30 ''' 引發 Click 事件。
31 ''' </summary>
32 Public Overloads Sub RaiseClickEvent(ByVal e As ClickEventArgs)
33 RaiseEvent Click(Me, e)
34 End Sub
35
36 ''' <summary>
37 ''' 所有按鈕的事件處理函式。
38 ''' </summary>
39 Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
40 btnMoveFirst.Click, btnMovePrevious.Click, btnMoveNext.Click, btnMoveLast.Click
41 Dim oEventArgs As New ClickEventArgs()
42
43 '取得作用按鈕的 CommandName
44 oEventArgs.CommandName = CType(sender, Button).CommandName
45 '引發 Click 事件
46 RaiseClickEvent(oEventArgs)
47 End Sub
48
49End Class
2 Inherits System.Web.UI.UserControl
3
4 ''' <summary>
5 ''' Toolbar 控制項的 Click 事件引數。
6 ''' </summary>
7 Public Class ClickEventArgs
8 Inherits System.EventArgs
9 Dim FCommandName As String = String.Empty
10
11 ''' <summary>
12 ''' 按鈕命令。
13 ''' </summary>
14 Public Property CommandName() As String
15 Get
16 Return FCommandName
17 End Get
18 Set(ByVal value As String)
19 FCommandName = value
20 End Set
21 End Property
22 End Class
23
24 ''' <summary>
25 ''' 按下工具列按鈕引發的事件。
26 ''' </summary>
27 Public Event Click(ByVal sender As Object, ByVal e As ClickEventArgs)
28
29 ''' <summary>
30 ''' 引發 Click 事件。
31 ''' </summary>
32 Public Overloads Sub RaiseClickEvent(ByVal e As ClickEventArgs)
33 RaiseEvent Click(Me, e)
34 End Sub
35
36 ''' <summary>
37 ''' 所有按鈕的事件處理函式。
38 ''' </summary>
39 Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
40 btnMoveFirst.Click, btnMovePrevious.Click, btnMoveNext.Click, btnMoveLast.Click
41 Dim oEventArgs As New ClickEventArgs()
42
43 '取得作用按鈕的 CommandName
44 oEventArgs.CommandName = CType(sender, Button).CommandName
45 '引發 Click 事件
46 RaiseClickEvent(oEventArgs)
47 End Sub
48
49End Class
在 Toolbar.ascx.vb中定义了 Click 事件,Click 事件自变量为 ClickEventArgs,ClickEventArgs 具有 CommandName 属性,用来识别按钮命令。当 Toolbar 按下按钮时,会进 Button_Click 事件处理函式,在此函式中取得作用按钮的 CommandName,并引发 Toolbar 的 Click 事件。
接下来就是检验成果的时候,将 Toolbar UserControl 拖曳至页面上,切换至页面的程序代码 (*.aspx.vb),在控件清单中选取 Toolbar,在右方的事件清单中,就可以看到在 Toolbar 定义的 Click 事件了。
在 Toolbar UserControl 的 Click 事件中,撰写如下程序代码,当按下按钮时就会输出对应的 CommandName。
1Partial Class _Default
2 Inherits System.Web.UI.Page
3
4 Protected Sub Toolbar1_Click(ByVal sender As Object, ByVal e As Toolbar.ClickEventArgs) Handles Toolbar1.Click
5 Me.Response.Write(e.CommandName)
6 End Sub
7End Class
2 Inherits System.Web.UI.Page
3
4 Protected Sub Toolbar1_Click(ByVal sender As Object, ByVal e As Toolbar.ClickEventArgs) Handles Toolbar1.Click
5 Me.Response.Write(e.CommandName)
6 End Sub
7End Class
程序代码下载:UserControlEvent.rar