如何阻止Visual Studio在我的UserControl中生成Setter调用?
本文关键字:Setter 调用 UserControl Visual 何阻止 Studio 我的 | 更新日期: 2023-09-27 17:51:23
我已经为我的Winform应用程序创建了两个继承自UserControl的控件。根据需要,它们都具有无参数构造函数。当我把它们放到主表单上时,我在设计时在Visual Studio中得到一个错误,它无法渲染表单。
我发现的是,在表单的Designer.cs文件中,我的控件实例化的地方,IDE在那里放置了一行调用我的setter之一。BlockKey = 0
。setter后面的代码调用了其他代码,很快抛出了NullReferenceException因为表单没有运行;此时,其他代码还没有准备好生成任何东西。
如果我手动删除setter行,错误就会消失。但是关闭并重新打开或重新编译时,IDE会再次将该行放回原处。我尝试在UserControl内部用[DefaultValue(false)]
装饰setter,认为这会抑制对setter的设计时调用,但它没有。
如何在设计器中删除该行?或者我应该在setter中编写一些预防性代码?
您应该在您的属性上使用DesignerSerializationVisibilityAttribute
属性并将其设置为Hidden
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int BlockKey
{
get { return 0; }
set { /* Do something */ }
}
或者,如果你需要更具体的逻辑(即只在某些条件下序列化),那么你必须创建一个函数,返回一个bool值,并具有bool ShouldSerialize*PropertyName*()
格式的特定名称
bool ShouldSerializeBlockKey()
{
return false;
}
(注意:我忘了这个函数是否必须是公共的…)
你要找的是DesignerSerializationVisibilityAttribute
。这控制设计器是否序列化特定属性的默认值
如果您指定属性为Hidden
,设计器将不会为它们添加值