C# 防止在Designer.cs中将UserControl公共变量分配给

C# 防止在Designer.cs中将UserControl公共变量分配给,c#,.net,winforms,user-controls,C#,.net,Winforms,User Controls,我有一个简单的用户控件,带有一些公共的StartDate和EndDateDateTime属性。默认情况下,我不希望在设计器中设置这些控件,但是当我将控件拖到新窗体上时,它会在设计器代码中指定默认的DateTime对象 有没有办法通过属性或类似的方式来解决这个问题 ****Designer Code on form that uses the control**** // // dateControl // this.dateControl.Anchor = ((System.Windows

我有一个简单的用户控件,带有一些公共的
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);
    }
}

是的,为了对设计器隐藏属性,您必须添加一些属性,
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
应该这样做

/**** UserControl class ****/
public partial class DatePeriodSelectionControl : UserControl
{
    public DatePeriodSelectionControl()
    {
        InitializeComponent();
    }

    public event EventHandler DateChanged;

    [Browsable( false )]
    [DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden )]
    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;
        }
    }

    [Browsable( false )]
    [DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden )]
    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);
    }
}