我正在制作自定义控件,当VS编写Designer.cs文件时,某些属性会生成这些奇怪的空白注释。例如:
//
// myControl
//
this.myControl.Name = "myControl";
this.myControl.Property = 30;
this.myControl.OtherProperty = 20;
//
//
//
this.myControl.Options1.Name = null;
this.myControl.Options1.Option = "example";
//
//
//
this.myControl.Options2.Name = null;
this.myControl.Options2.SomeProperty = 50;
this.myControl.Options2.SomeEvent += new System.EventHandler(this.myControl_Options2_SomeEvent);
this.myControl.OtherProperty = 10;
有人知道造成这些空白评论的原因是什么吗?我根本不喜欢任何评论,但如果我至少可以显示“myControl.Options1”这个名称是可以接受的。
这是我课程的粗略结构(虽然非常简化):
[ToolboxItem(false)]
public class Options : IComponent
// I implement IComponent so this class appears in the Properties window nicely. Not sure why exactly it works though.
{
#region Implement IComponent
public ISite Site { get; set; }
public void Dispose()
{
// Nothing needs to be disposed
Disposed?.Invoke(this, EventArgs.Empty);
}
public event EventHandler Disposed;
#endregion
}
public partial class MyControl : UserControl
{
#region Options
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Options Options1 { get; private set; }
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Options Options2 { get; private set; }
public MyControl
{
Options1 = new Options();
Options2 = new Options();
}
#endregion
}
任何想法都会非常有用!我无法在网上找到这个问题。我的假设是我误用了IComponent接口,但我不确定如何修复它。
答案 0 :(得分:3)
这些注释是自动生成的,对输出二进制文件没有影响。当你编译时,它们都将被删除,所以你不必担心膨胀或类似的东西。为了可维护性,应将其他开发人员引导至设计人员,而不是输出代码。如果有人在设计师中做出改变,他们的编辑将不会被保留。
我建议完全忽略设计师实际发出的东西。但这并不是真正意义上的编辑 - 用于查看设计师实际创建的源代码。
答案 1 :(得分:1)
这是序列化组件名称时ComponentCodeDomSerializer的默认行为。
您可以从ComponentCodeDomSerializer派生并覆盖Serialize,调用基类,然后从返回的CodeStatementCollection中删除CodeCommentStatement对象。
答案 2 :(得分:1)
你有什么联系,看起来有点奇怪。那么评论系统的工作原理如下: 您的自动生成的设计器“方法”将使用描述其行为的xml注释进行签名。 它还会写注释以定义在当前块上设置哪些控件属性。 在你的情况下:
//
// myControl
//
this.myControl.Name = "myControl";
this.myControl.Property = 30;
this.myControl.OtherProperty = 20;
'myControl'表示有一个名为'myControl'的控件,以下行正在设置它的属性。 正如你所说,你将运送这种控制。我认为事件这些简短的无意义评论很有用。
答案 3 :(得分:0)
编辑:没关系,这不起作用。看起来它一直工作,直到我在其他地方使用控制器,问题重新出现。
我发现在我的选项类中添加以下属性对我有用:
[ToolboxItem(false)]
[DesignerSerializer(typeof(CodeDomSerializer), typeof(CodeDomSerializerBase))]
public class Options : IComponent
{
...
}