我有一个自定义的WinForms控件,它曾经是PictureBox的后代(它实现了ISupportInitialize),我转换为Control的后代(它没有实现ISupportInitialize)。
我在控件中有两个死方法BeginInit()和EndInit(),其唯一目的是不破坏人们现有的设计器代码。 WinForms设计器生成如下内容:
((System.ComponentModel.ISupportInitialize)(this.helpButton1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.helpButton1)).EndInit();
这意味着如果我拿出ISupportInitialize,没有人会得到编译器警告某些内容有问题,它会在运行时因类型转换失败而崩溃(无法将HelpButton强制转换为ISupportInitialize)。
通常要删除不推荐使用的属性,可以将其标记为[已废弃]和[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)],或者只是将其删除并强制所有人在编译之前将其从designer.cs文件中删除。但是使用ISupportInitialize,一旦添加它,你似乎就会永远支持它。
我想过使用显式转换为ISupportInitialize,但这不起作用,因为您无法创建对接口的显式转换:
public static explicit operator ISupportInitialize(HelpButton self)
{
return new FakeISupportInitialize();
}
// gives error: user-defined conversions to or from an interface are not allowed.
有没有办法在不破坏现有代码的情况下消除界面设计者的可见性?