是否将CalendarExtender动态添加到Textbox子类服务器控件?
时间:2020-03-05 18:58:59 来源:igfitidea点击:
我正在尝试创建一个从TextBox继承的服务器控件,该控件将自动添加一个CalendarExtender。是否可以这样做,还是我的新控件需要继承自CompositeControl?我已经尝试过前一种方法,但是我不清楚应该在控件生命周期的哪一部分中创建CalendarExtender的新实例,以及应将其添加到哪个控件集合中。我似乎无法将其添加到Page或者Form的控件集合中,并且如果将其添加到(TextBox)控件的集合中,则无法获得任何弹出日历功能。
解决方案
回答
我不久前在一个项目中完成了此任务。为此,我创建了一个既包含TextBox又包含CalendarExtender的CompositeControl。
在CompositeControl的CreateChildControls
方法中,我使用类似于以下代码:
TextBox textbox = new TextBox(); textbox.ID = this.ID + "Textbox"; textbox.Text = this.EditableField.TextValue; textbox.TextChanged += new EventHandler(HandleTextboxTextChanged); textbox.Width = new Unit(100, UnitType.Pixel); CalendarExtender calExender = new CalendarExtender(); calExender.PopupButtonID = "Image1"; calExender.TargetControlID = textbox.ID; this.Controls.Add(textbox); this.Controls.Add(calExender);
当然,请确保包含此CompositeControl的窗体具有工具箱脚本管理器。
回答
我知道这是一个旧线程,但是当我遇到类似问题时才遇到它。这就是我最终实现的,并且效果很好。如果要使控件成为TextBox,则只需在调用Render的过程中抽出扩展器即可。
Imports System.Web.UI.WebControls Imports AjaxControlToolkit Public Class DateTextBox Inherits TextBox Private _dateValidator As CompareValidator Private _calendarExtender As CalendarExtender Protected Overrides Sub OnInit(ByVal e As System.EventArgs) MyBase.OnInit(e) _dateValidator = New CompareValidator With _dateValidator .ControlToValidate = ID Rem set your other properties End With Controls.Add(_dateValidator) _calendarExtender = New CalendarExtender With _calendarExtender .TargetControlID = ID End With Controls.Add(_calendarExtender) End Sub Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) MyBase.Render(writer) _dateValidator.RenderControl(writer) _calendarExtender.RenderControl(writer) End Sub End Class