自定义服务器控件之:日历 DateBox 控件

之前一直在使用梅花雨日历控件作为日历输入,但是在.Net 使用时发现几个问题:
1:每次在日历框后面都要写一个图像等代码;
2:如果用户没有输入数据在服务器取值时还要先判断;

为了解决以上两个问题所以写了如下的控件:
该控件使用简单只有直接拖拽到页面即可,取赋值时全部使用Value属性。
请注意:为了方便替换日历控件,控件JS并没有包含在Dll中,所以页面必须包含  日历控件 的 JS

MicroSystem.WebControls.Datebox 日期文本框(IE5+):
自带了日历选择功能(日历使用了梅花雨日历控件)

< msi:DateBox  ID ="OpenDate"  runat ="server"  CssClass ="SetDate"   MustInput="true" ></ msi:DateBox >
MicroSystem.WebControls.zip 包含全部源码,文档、实例


DataBox.vb
Imports System.ComponentModel
Imports System.Web.UI
Imports ASP = System.Web.UI.WebControls
Imports MicroSystem.WebControls

''' <summary>
'
'' 日期文本框
'
'' </summary>
'
'' <remarks>
'
'' <example>
'
'' <code>
'
'' &lt;msi:DateBox ID="OpenDate" runat="server" CssClass="SetDate" &gt;&lt;/msi:DateBox&gt;
'
'' </code>
'
'' </example>
'
'' 2007-7-3 <br />
'
'' 需要改进:当文本框为 Enabled = false 或者 readonly = true 时 隐藏日历Img <br />
'
'' 当postback 时不能再显示Img,暂未实现上述功能;可以考虑在客户端用 HTC 实现
'
'' </remarks>
<DefaultProperty("Value")> _
<ToolboxData("<{0}:DateBox runat=server CssClass=SetDate></{0}:DateBox>")> _
Public Class DateBoxClass DateBox
    
Inherits BaseBox

    
''' <summary>
    ''' 获取或设置日期
    ''' </summary>
    ''' <returns>如空返回 Nothing</returns>
    <Browsable(True)> _
    
<Bindable(False)> _
    
<Category("Appearance")> _
    
<DefaultValue("")> _
    
<Localizable(True)> _
    
<Description("返回日期,如空返回 Nothing ")> _
    
Property Value()Property Value() As Date
        
Get
            
If Me.Text = "" Then
                
Return Nothing
            
Else
                
Return CDate(Me.Text)
            
End If
            
'Return IIf(Me.Text = "", Nothing, CDate(Me.Text))
        End Get
        
Set(ByVal value As Date)
            
If value.Year > 1 Then
                
Me.Text = Format(value, "yyyy-MM-dd")
            
End If
        
End Set
    
End Property


    
''' <summary>
    ''' 获取控件的行为模式(单行)
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks>只读</remarks>
    <Browsable(False)> _
    
<Bindable(False)> _
    
Public Shadows ReadOnly Property TextMode()Property TextMode() As ASP.TextBoxMode
        
Get
            
Return ASP.TextBoxMode.SingleLine
        
End Get
    
End Property


    
Protected Overrides Sub Render()Sub Render(ByVal writer As HtmlTextWriter)
        
MyBase.AddAttributesToRender(writer)
        writer.RenderBeginTag(HtmlTextWriterTag.Input)
        writer.RenderEndTag()
        
'If Me.Enabled And Me.ReadOnly Then '
        'writer.Write("<img src='images/date.gif' alt=""点击选择日期"" οnclick=""setday(this,document.getElementById('" + Me.ClientID + "'))"" />")
        writer.AddAttribute(HtmlTextWriterAttribute.Src, Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MicroSystem.WebControls.date.gif"))
        writer.AddAttribute(HtmlTextWriterAttribute.Alt, 
"点击选择日期")
        writer.AddAttribute(HtmlTextWriterAttribute.Onclick, 
"setday(this,document.getElementById('" + Me.ClientID + "'))")
        writer.AddAttribute(HtmlTextWriterAttribute.Class, 
"link")
        writer.RenderBeginTag(HtmlTextWriterTag.Img)
        writer.RenderEndTag()
        
'End If

        
If Me.MustInput Then
            
'MyBase.RFVMustInput = New ASP.RequiredFieldValidator
            MyBase.RFVMustInput.RenderControl(writer)
        
End If
        
' MyBase.Render(writer)
    End Sub


End Class
posted on 2007-08-09 20:27  阿慧南 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/MicroSystem/archive/2007/08/09/849351.html

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值