相对于 ServerControl 来说,UserControl 是相当容易上手的,利用拖曳现有控件就可以组合成复杂的控件。
一般 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="末筆" />



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 ObjectByVal 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 ObjectByVal 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 ObjectByVal e As Toolbar.ClickEventArgs) Handles Toolbar1.Click
5        Me.Response.Write(e.CommandName)
6    End Sub

7End Class

程序代码下载UserControlEvent.rar

posted on 2008-01-19 00:49  jeff377  阅读(2563)  评论(13编辑  收藏  举报