控件名称:
chkSelect
label1
BeginDatePicker
EndDatePicker
控件代码如下(直接从UserControl继承)
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Drawing; 5 using System.Data; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace CustomControlSample 11 { 12 [ToolboxBitmap(typeof(System.Windows.Forms.DateTimePicker))] 13 public partial class DateTimeBeginEnd : UserControl 14 { 15 public DateTimeBeginEnd() 16 { 17 InitializeComponent(); 18 this.FCheckboxVisible = true; 19 this.BeginDatePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 20 this.EndDatePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 21 this.BeginDatePicker.CustomFormat = "yyyy-MM-dd HH:mm:ss"; 22 this.EndDatePicker.CustomFormat = "yyyy-MM-dd HH:mm:ss"; 23 this.BeginDatePicker.Left=nBeginDateLeft; 24 } 25 26 private int nBeginDateLeft=25; 27 28 private DateTime FBeginDate; 29 private DateTime FEndDate; 30 private Boolean FCheckDateTime; 31 private Boolean FCheckboxVisible; 32 private Boolean FCheckboxChecked; 33 private DateTimePickerFormat FDateTimeFormat; 34 private string FDateTimeCustomFormat; 35 36 public delegate void CustomFormatChangeEventHandle(object sender, EventArgs arg); 37 public event CustomFormatChangeEventHandle FormatChanged; 38 39 private void OnFormatChanged(EventArgs e) 40 { 41 if (this.FormatChanged!=null) 42 { 43 this.FormatChanged(this,e); 44 } 45 } 46 47 public DateTime BeginDate 48 { 49 get 50 { 51 this.FBeginDate = this.BeginDatePicker.Value; 52 return this.FBeginDate; 53 } 54 set 55 { 56 this.FBeginDate = value; 57 this.BeginDatePicker.Value = this.FBeginDate; 58 } 59 } 60 61 public DateTime EndDate 62 { 63 get 64 { 65 this.FEndDate = this.EndDatePicker.Value; 66 return this.FEndDate; 67 } 68 set 69 { 70 this.FEndDate = value; 71 this.EndDatePicker.Value =this.FEndDate; 72 } 73 } 74 75 public Boolean CheckDateTime 76 { 77 get 78 { 79 this.FCheckDateTime = this.chkSelect.Checked; 80 return this.FCheckDateTime; 81 } 82 set 83 { 84 this.FCheckDateTime = value; 85 this.chkSelect.Checked = this.FCheckDateTime; 86 } 87 } 88 89 public Boolean CheckboxVisible 90 { 91 get 92 { 93 this.FCheckboxVisible = this.chkSelect.Visible; 94 return this.FCheckboxVisible; 95 } 96 set 97 { 98 this.FCheckboxVisible = value; 99 this.chkSelect.Visible = this.FCheckboxVisible;100 }101 }102 103 public DateTimePickerFormat DateTimeFormat104 {105 get106 {107 this.FDateTimeFormat = this.BeginDatePicker.Format;108 return this.FDateTimeFormat;109 }110 set111 {112 if (FDateTimeFormat != value)113 {114 this.FDateTimeFormat = value;115 this.BeginDatePicker.Format = this.FDateTimeFormat;116 this.EndDatePicker.Format = this.FDateTimeFormat;117 OnFontChanged(null);118 }119 }120 }121 122 public string DateTimeCustomFormat123 {124 get125 {126 this.FDateTimeCustomFormat = this.BeginDatePicker.CustomFormat;127 return this.FDateTimeCustomFormat;128 }129 set130 {131 this.FDateTimeCustomFormat = value;132 this.BeginDatePicker.CustomFormat = this.FDateTimeCustomFormat;133 this.EndDatePicker.CustomFormat = this.FDateTimeCustomFormat;134 }135 }136 137 public Boolean CheckboxChecked138 {139 get140 {141 this.FCheckboxChecked = this.chkSelect.Checked;142 return this.FCheckboxChecked;143 }144 set145 {146 this.FCheckboxChecked = value;147 this.chkSelect.Checked = this.FCheckboxChecked;148 }149 }150 151 public event EventHandler BeginDatePickerChange;152 public event EventHandler EndDatePickerChange;153 public event EventHandler CheckBoxClick;154 155 protected void OnBeginDateChange(EventArgs arg)156 {157 if (BeginDatePickerChange != null)158 BeginDatePickerChange(this, arg);159 }160 161 protected void OnEndDateChange(EventArgs arg)162 {163 if (EndDatePickerChange != null)164 EndDatePickerChange(this, arg);165 }166 167 protected void OnCheckBoxChange(EventArgs arg)168 {169 if (CheckBoxClick != null)170 CheckBoxClick(this,arg);171 }172 173 private void EndDatePicker_ValueChanged(object sender, EventArgs e)174 {175 OnEndDateChange(e);176 }177 178 private void BeginDatePicker_ValueChanged(object sender, EventArgs e)179 {180 OnBeginDateChange(e);181 }182 183 private void chkSelect_Click(object sender, EventArgs e)184 {185 OnCheckBoxChange(e);186 }187 188 private void EndDatePicker_FormatChanged(object sender, EventArgs e)189 {190 OnFormatChanged(e);191 TextChange();192 }193 194 private void BeginDatePicker_FormatChanged(object sender, EventArgs e)195 {196 OnFormatChanged(e);197 TextChange();198 }199 200 private void EndDatePicker_FontChanged(object sender, EventArgs e)201 {202 OnFormatChanged(e);203 TextChange();204 //if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)205 //{206 // //returnFlag = true; DesignMode设计时状态207 //}208 //else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper().Equals("DEVENV"))209 //{210 // //returnFlag = true;211 //} 212 }213 214 private void TextChange()215 {216 this.BeginDatePicker.Width = TextRenderer.MeasureText(this.BeginDatePicker.Value.ToString(this.BeginDatePicker.CustomFormat), this.BeginDatePicker.Font).Width+37;217 this.EndDatePicker.Width = TextRenderer.MeasureText(this.EndDatePicker.Value.ToString(this.EndDatePicker.CustomFormat), this.EndDatePicker.Font).Width + 37;218 this.label1.Left =this.BeginDatePicker.Left+this.BeginDatePicker.Width+2;219 this.EndDatePicker.Left = this.label1.Left + this.label1.Width + 2;220 }221 222 private void BeginDatePicker_FontChanged(object sender, EventArgs e)223 {224 OnFormatChanged(e);225 TextChange();226 }227 228 private void DateTimeBeginEnd_Resize(object sender, EventArgs e)229 {230 //int nLabelLeft = 0;231 //int nEndDateLeft = 0;232 //nLabelLeft = this.BeginDatePicker.Left + this.BeginDatePicker.Width + 2;233 //this.label1.Left = nLabelLeft;234 //nEndDateLeft = this.label1.Left + this.label1.Width + 2;235 //this.EndDatePicker.Left = nEndDateLeft;236 this.BeginDatePicker.Width=(this.Width-25-label1.Width-6)/2;237 this.EndDatePicker.Width=this.BeginDatePicker.Width;238 this.label1.Left=this.BeginDatePicker.Left + this.BeginDatePicker.Width + 2;239 this.EndDatePicker.Left =this.label1.Left + this.label1.Width + 2;240 }241 }242 }