【发布时间】:2020-11-18 23:42:32
【问题描述】:
我有一个简单的用户控件,其中包含一些公共 StartDate 和 EndDate DateTime 属性。我不希望这些默认设置在设计器中,但是当我将控件拖到新表单上时,它会在设计器代码中分配一个默认的 DateTime 对象。
有没有办法通过属性或类似的属性来解决这个问题?
****Designer Code on form that uses the control****
//
// dateControl
//
this.dateControl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.dateControl.EndDate = new System.DateTime(((long)(0))); // > Don't want this set here.
this.dateControl.Location = new System.Drawing.Point(35, 113);
this.dateControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.dateControl.Name = "dateControl";
this.dateControl.Size = new System.Drawing.Size(282, 63);
this.dateControl.StartDate = new System.DateTime(((long)(0))); // > Don't want this set here.
this.dateControl.TabIndex = 249;
**** UserControl class ****
public partial class DatePeriodSelectionControl : UserControl
{
public DatePeriodSelectionControl()
{
InitializeComponent();
}
public event EventHandler DateChanged;
public DateTime StartDate
{
get
{
if (dateFrom?.EditValue is null) return DateTime.Today;
return (DateTime) dateFrom?.EditValue;
}
set
{
if (dateFrom is null) return;
dateFrom.EditValue = value;
}
}
public DateTime EndDate
{
get
{
if (dateTo?.EditValue is null) return DateTime.Today;
return (DateTime)dateTo?.EditValue;
}
set
{
if (dateTo is null) return;
dateTo.EditValue = value;
}
}
private void cbxDateRange_CloseUp(object sender, DevExpress.XtraEditors.Controls.CloseUpEventArgs e)
{
DateTimeHelper.GetDatesFromPeriodDescription(e.Value as string, out var dtFrom, out var dtTo);
StartDate = dtFrom;
EndDate = dtTo;
DateChanged?.Invoke(sender, EventArgs.Empty);
}
private void dateFrom_CloseUp(object sender, DevExpress.XtraEditors.Controls.CloseUpEventArgs e)
{
StartDate = (DateTime)e.Value;
DateChanged?.Invoke(sender, EventArgs.Empty);
}
private void dateTo_CloseUp(object sender, DevExpress.XtraEditors.Controls.CloseUpEventArgs e)
{
EndDate = (DateTime)e.Value;
DateChanged?.Invoke(sender, EventArgs.Empty);
}
private void cbxDateRange_EditValueChanged(object sender, EventArgs e)
{
if (cbxDateRange.IsPopupOpen) return;
DateTimeHelper.GetDatesFromPeriodDescription(cbxDateRange.EditValue as string, out var dtFrom, out var dtTo);
StartDate = dtFrom;
EndDate = dtTo;
DateChanged?.Invoke(sender, EventArgs.Empty);
}
}
【问题讨论】:
标签: c# .net winforms user-controls