Хотелось бы отметить, что у виджета DatePicker пользовательского интерфейса jQuery есть очень хороший метод утилиты проверки даты, который проверяет формат и действительность (например, даты 01/33/2013 не допускаются).
Даже если вы не хотите использовать виджет datepicker на своей странице в качестве элемента пользовательского интерфейса, вы всегда можете добавить его библиотеку .js на свою страницу и затем вызвать метод validator, передав значение, которое вы хотите проверить в нем. , Чтобы сделать жизнь еще проще, в качестве входных данных используется строка, а не объект JavaScript Date.
См .: http://api.jqueryui.com/datepicker/
. Он не указан как метод, но он есть - как вспомогательная функция. Найдите на странице слово «parsedate», и вы найдете:
$. Datepicker.parseDate (формат, значение, настройки) - извлечение даты из строкового значения в указанном формате.
Пример использования:
var stringval = '01/03/2012';
var testdate;
try {
testdate = $.datepicker.parseDate('mm/dd/yy', stringval);
// Notice 'yy' indicates a 4-digit year value
} catch (e)
{
alert(stringval + ' is not valid. Format must be MM/DD/YYYY ' +
'and the date value must be valid for the calendar.';
}
(Более подробную информацию о форматах даты можно найти на http://api.jqueryui.com/datepicker/#utility-parseDate )
В приведенном выше примере вы не увидите предупреждающее сообщение, поскольку «01/03/2012» является датой, действующей в календаре, в указанном формате. Однако если вы, например, сделаете 'stringval' равным '13/04/2013', вы получите предупреждающее сообщение, поскольку значение '13/04/2013' недействительно в календаре.
Если переданное строковое значение успешно проанализировано, значением 'testdate' будет объект даты Javascript, представляющий переданное строковое значение. Если нет, это было бы неопределенным.
Когда вы пытаетесь получить доступ из унаследованного элемента управления с помощью конструктора к TableLayoutPanel, объявленной в базовом элементе управления, вы используете функцию WinForms под названием «Визуальное наследование».
К сожалению, TableLayoutPanel не поддерживает визуальное наследование: http://msdn.microsoft.com/en-us/library/ms171689%28VS.80%29.aspx
Вот почему TableLayoutPanel кажется заблокированным в унаследованных элементах управления.
Try adding this attribute to the definition of the panel (this may or may not help):
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
Вы должны сами разработать базовые элементы управления. Изменения отражаются в конструкторе после успешного перестроения проекта элементов управления. Если вы сделаете участников общедоступными, вы можете редактировать их, но изменения не сохранятся.
Попробуйте создать ParentControlDesigner
для своего элемента управления, переопределив InternalControlDesigner
и вернув (designerHost.GetDesigner (tableLayoutPanel) как ControlDesigner)
. designerHost
- это (IDesignerHost) component.Site.GetService (typeof (IDesignerHost))
.
Я смутно помню, как решил аналогичную проблему, поместив базовый класс в его собственную DLL и сначала построим его. Я покопался, но не могу найти проект. Извините.