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);
}
}