自己做的Check控件

本文介绍了一种自定义CheckBox控件的方法,该控件适用于特殊需求场景,能够提供灵活的外观定制选项,并避免了.NET框架类库中相关类使用样式表的不便。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        这几天在论坛上看到"总是听见有很多人说,要尽量避免使用服务器控件和替换服务器控件,现在发个贴来征集所有的办法"这样的帖子..帖子招来很多同僚的关注..大部分都同意用服务器端控件..而少部分人同意用HTML控件..而同意服务器端控件的朋友说服务器端控件开发效率很快..而用HTML控件..开发效率很慢..而且一时很难下手..复用程度不高...

      但是我在这里反问为什么不自己写控件....昨天小弟花了半天的时间写了一个CheckBOx控件..因为时间的原因..可能有些BUG..这个控件不是做于商业用途..只是用于学习..OK?代码如下:

Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.HtmlControls

Namespace Framework.WebControls
    '''  
    ''' 简单实现可以自定义外观的CheckBox,只是在有特殊需要时使用。 
    ''' 同时避开.NET 框架类库中相关类使用样式表的不方便性。 
    '''  
    Public Class CheckBox
        Inherits Control
        Implements INamingContainer
        'IPostBackEventHandler 
        '''  
        ''' 获取或设置一个值,该值指示是否被选中。 
        '''  
        Public Property Checked() As Boolean
            Get
                state.Value = IIf((state.Value = ""), "False", state.Value)
                Return Convert.ToBoolean(state.Value)
            End Get
            Set(ByVal Value As Boolean)
                state.Value = Value.ToString()
                Me.Controls.Clear()
                CreateChildControls()
            End Set
        End Property
        '''  
        ''' 获取或设置客户端脚本 
        '''  
        Public Property ClientAction() As String
            Get
                Return IIf((ViewState("act") Is Nothing), "", ViewState("act").ToString())
            End Get
            Set(ByVal Value As String)
                ViewState("act") = Value
            End Set
        End Property
        '''  
        ''' 获取或设置一个值,该值指示是否回发。 
        '''  
        Public Property AutoPostBack() As Boolean
            Get
                Return _auto
            End Get
            Set(ByVal Value As Boolean)
                _auto = Value
            End Set
        End Property
        '''  
        ''' 在改变Checked属性时发生。 
        '''  
        Public Event ServerChange As EventHandler

        Private _auto As Boolean
        Private state As System.Web.UI.HtmlControls.HtmlInputHidden = New HtmlInputHidden
        Private box As System.Web.UI.HtmlControls.HtmlInputButton = New HtmlInputButton
        Public JSFunction As String = "__doChangeCheckBox"
        Private Sub Check_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Me.Checked = IIf((Me.Checked = True), False, True)
            OnServerChange(sender, e)
        End Sub

        Protected Overridable Sub OnServerChange(ByVal sender As Object, ByVal e As System.EventArgs)
            RaiseEvent ServerChange(Me, e)
        End Sub
        Protected Overloads Overrides Sub CreateChildControls()
            Me.Controls.Remove(box)
            box = New HtmlInputButton
            box.ID = "box"
            If Me.AutoPostBack = True Then
                box.Attributes.Add("onmousedown", "__doMouseDown(this)")
                AddHandler box.ServerClick, AddressOf Check_Click
            Else
                box.Attributes.Add("onclick", Me.ClientAction)
                box.Attributes.Add("onmousedown", JSFunction + "(this)")
            End If
            'box.Attributes.Add("language","javascript"); 
            Me.Controls.Add(box)
            state.ID = "state"
            state.Attributes.Add("value", Me.Checked.ToString())
            Me.Controls.Add(state)
        End Sub
        Protected Overloads Overrides Sub Render(ByVal output As HtmlTextWriter)
            '改变外观通过改变样式表的类实现 
            If Me.Checked = True Then
                box.Attributes.Add("class", "CheckedItem")
            Else
                box.Attributes.Add("class", "UnCheckedItem")
            End If
            output.Write("
") box.RenderControl(output) state.RenderControl(output) output.Write("
") End Sub End Class End Namespace
 
 1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值