|
using System;
using System.ComponentModel;
using System.Reflection;
using System.Windows.Forms;
namespace Pfz.Databasing.Controls.Generators
{
internal sealed class DateTimeControl:
DateTimePicker,
IPropertyBoundControl
{
static DateTimeControl()
{
DefaultDateFormat = "dd/MM/yyyy";
DefaultTimeFormat = "HH:mm:ss";
DefaultDateTimeFormat = "dd/MM/yyyy HH:mm:ss";
}
public static string DefaultDateFormat { get; set; }
public static string DefaultTimeFormat { get; set; }
public static string DefaultDateTimeFormat { get; set; }
public DateTimeControl(Type recordType, PropertyInfo propertyInfo)
{
RecordType = recordType;
RecordProperty = propertyInfo;
Enabled = false;
Format = DateTimePickerFormat.Custom;
var propertyType = propertyInfo.PropertyType;
if (propertyType == typeof(Time) || propertyType == typeof(Time?))
CustomFormat = DefaultTimeFormat;
else
if (propertyType == typeof(Date) || propertyType == typeof(Date?))
CustomFormat = DefaultDateFormat;
else
CustomFormat = DefaultDateTimeFormat;
if (propertyType.IsGenericType)
ShowCheckBox = true;
}
public Type RecordType { get; private set; }
public PropertyInfo RecordProperty { get; private set; }
private IRecord fRecord;
public IRecord Record
{
get
{
return fRecord;
}
set
{
fRecord = value;
if (value == null)
Enabled = false;
else
{
Enabled = value.GetRecordMode() != RecordMode.ReadOnly;
ReadRecord();
}
}
}
public void ReadRecord()
{
object value = RecordProperty.GetValue(Record, null);
if (value == null)
Checked = false;
else
{
DateTime dateTime;
if (value is Time)
dateTime = (Time)value;
else
if (value is Date)
dateTime = (Date)value;
else
dateTime = (DateTime)value;
Value = dateTime;
}
}
public void WriteRecord()
{
if (!Checked)
{
RecordProperty.SetValue(Record, null, null);
return;
}
DateTime dateTime = Value;
var type = RecordProperty.PropertyType;
if (type == typeof(DateTime) || type == typeof(DateTime?))
{
RecordProperty.SetValue(Record, dateTime, null);
return;
}
if (type == typeof(Date) || type == typeof(Date?))
{
Date date = (Date)dateTime;
RecordProperty.SetValue(Record, date, null);
return;
}
Time time = (Time)dateTime;
RecordProperty.SetValue(Record, time, null);
}
protected override void OnValidating(CancelEventArgs e)
{
if (Enabled)
WriteRecord();
base.OnValidating(e);
}
string IPropertyBoundControl.DisplayName
{
get { throw new NotImplementedException(); }
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I started to program computers when I was 11 years old, as a hobbyist, programming in AMOS Basic and Blitz Basic for Amiga.
At 12 I had my first try with assembler, but it was too difficult at the time. Then, in the same year, I learned C and, after learning C, I was finally able to learn assembler (for Motorola 680x0).
Not sure, but probably between 12 and 13, I started to learn C++. I always programmed "in an object oriented way", but using function pointers instead of virtual methods.
At 15 I started to learn Pascal at school and to use Delphi. At 16 I started my first internship (using Delphi). At 18 I started to work professionally using C++ and since then I've developed my programming skills as a professional developer in C++ and C#, generally creating libraries that help other developers do their work easier, faster and with less errors.
Want more info or simply want to contact me?
Take a look at:
http://paulozemek.azurewebsites.net/
Or e-mail me at: paulozemek@outlook.com
Codeproject MVP 2012, 2015 & 2016
Microsoft MVP 2013-2014 (in October 2014 I started working at Microsoft, so I can't be a Microsoft MVP anymore).