Visual Studio 2010 在 Designer.cs 中对不需要的值进行硬编码

Visual Studio 2010 hardcoding unwanted values in Designer.cs

我在 Visual Studio 中的表单上有一个用户控件,它是一个自定义日期输入控件(为讨论目的而调用 CustomDate)。此控件包含一个名为 CompareDate 的 属性,其类型为 DateTime。这 gets/sets 一个名为 compareDate 的私有变量的值。 (不是控件或任何只是用于内部逻辑的变量)

我将此控件放在窗体 CustomerForm 上并将其命名为 uctCustomDate

出于某种原因,对 CustomerForm 所做的任何更改都会导致在 CustomerForm.Designer.cs 中自动插入一行,将 uctCustomDate.CompareDate 的值硬编码为今天的日期!

有没有办法避免这种情况?我可以只删除该行并构建应用程序,但这意味着我每次更改此表单时都必须记住这样做。有什么我应该注意的(例如,其他开发人员可能已经输入的)吗?

下面是一些代码,如果有帮助的话...

CompareDate.cs

private DateTime compareDate = DateTime.Today;   // BTW it happens whether or not I initialise to DateTime.Today

.
.
.

public DateTime CompareDate 
{
    get { return compareDate; }
    set { compareDate = value; }
}

每当我对 CustomerForm 表单设计进行更改时,代码会自动插入到 CustomerForm.Designer.cs

// 
// uctCustomDate
// 
this.uctCustomDate.CompareDate = new System.DateTime(2015, 6, 30, 0, 0, 0, 0);

如果您在 CompareDate 属性 上使用 BrowsableAttribute,它将不会显示在表单设计器 Properties window 中

如果您在 CompareDate 上使用可见性 = HiddenDesignerSerializationVisibilityAttribute,属性 将不会在 CustomerForm.Designer.cs

中序列化

[DesignerSerializationVisibilityAttribute]

现有行this.uctCustomDate.CompareDate = ...不会自动从 Designers 文件中删除

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public DateTime CompareDate 
{
    get { return compareDate; }
    set { compareDate = value; }
}

您是否尝试过将 compareDate 设置为可为 null 的 Datetime ?这样设计者就不要自己初始化了

DateTime? compareDate;


public DateTime? CompareDate 
{
    get { return compareDate; }
    set { compareDate = value; }
}