如何修改C#Designer.cs文件中的注释

如何修改C#Designer.cs文件中的注释,c#,winforms,windows-forms-designer,C#,Winforms,Windows Forms Designer,我目前正在制作一个自定义控件,当VS写入Designer.cs文件时,一些属性会生成这些奇怪的空白注释。例如: // // myControl // this.myControl.Name = "myControl"; this.myControl.Property = 30; this.myControl.OtherProperty = 20; // // // this.myControl.Options1.Name = null; this.myControl.Options1.

我目前正在制作一个自定义控件,当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”,那将是可以接受的

以下是我的课程的大致结构(尽管非常简化):


任何想法都会非常有用!我在网上其他任何地方都找不到这个问题。我的假设是我误用了IComponent接口,但我不确定如何修复它。

这些注释是自动生成的,不会影响输出二进制文件。编译时,它们都将被删除,因此您不必担心膨胀或类似的问题。对于可维护性,其他开发人员应该被引导到设计器,而不是输出的代码。如果有人在设计器中进行更改,则不会保留他们的编辑


我建议完全忽略设计师实际发出的信息。它实际上并不意味着要被编辑——但是,查看设计者实际创建的源代码很有用。

这些注释是自动生成的,对输出二进制文件没有影响。编译时,它们都将被删除,因此您不必担心膨胀或类似的问题。对于可维护性,其他开发人员应该被引导到设计器,而不是输出的代码。如果有人在设计器中进行更改,则不会保留他们的编辑


我建议完全忽略设计师实际发出的信息。它实际上并不意味着要被编辑-但是查看从设计器实际创建的源代码非常有用。

这是序列化组件名称时ComponentCodeDomSerializer的默认行为


您可以从ComponentCodeDomainSerializer派生并重写Serialize,调用基类,然后从返回的CodeStatementCollection中删除CodeCommentStatement对象

这是序列化组件名称时ComponentCodeDomainSerializer的默认行为


您可以从ComponentCodeDomainSerializer派生并重写Serialize,调用基类,然后从返回的CodeStatementCollection中删除CodeCommentStatement对象

编辑:没关系,这不起作用。直到我在其他地方使用了控件,问题又出现了,它才开始工作。

我发现在我的选项类中添加以下属性对我很有效:

[ToolboxItem(false)]
[DesignerSerializer(typeof(CodeDomSerializer), typeof(CodeDomSerializerBase))]
public class Options : IComponent
{ 
...
}

编辑:不用担心,这不起作用。直到我在其他地方使用了控件,问题又出现了,它才开始工作。

我发现在我的选项类中添加以下属性对我很有效:

[ToolboxItem(false)]
[DesignerSerializer(typeof(CodeDomSerializer), typeof(CodeDomSerializerBase))]
public class Options : IComponent
{ 
...
}

你链接的东西看起来有点奇怪。评论系统的工作原理如下: 自动生成的设计器“方法”将使用描述其行为的xml注释进行签名。 它还写入注释以定义在当前块上设置的控件属性。 就你而言:

// 
// myControl
// 
this.myControl.Name = "myControl";
this.myControl.Property = 30;
this.myControl.OtherProperty = 20;
“myControl”表示有一个名为“myControl”的控件,下面几行正在设置它的属性。
正如你说的,你要把这个控制装置运出去。我认为这些简短的无意义评论很有用。

你链接的内容看起来有点奇怪。评论系统的工作原理如下: 自动生成的设计器“方法”将使用描述其行为的xml注释进行签名。 它还写入注释以定义在当前块上设置的控件属性。 就你而言:

// 
// myControl
// 
this.myControl.Name = "myControl";
this.myControl.Property = 30;
this.myControl.OtherProperty = 20;
“myControl”表示有一个名为“myControl”的控件,下面几行正在设置它的属性。
正如你说的,你要把这个控制装置运出去。我认为这些简短的无意义评论很有用。

你不应该在意那些自动生成的评论,因为它们什么都不做,只是为了可读性而引入的。不过,您可以随意删除它们。通常,最好让生成的代码在安静的隔离状态下度过它的生命。@HimBromBeere不,不要删除它们,如果您对表单进行任何更改,您所做的任何编辑都将被覆盖。这是生成的代码,忽略它。同意,让它们继续。设计器代码不是执行OCD清理的地方…你会发疯的。此控件旨在供其他开发人员使用,因此,可读性正是我想要实现的,因为它现在看起来一团糟。你不应该在意那些自动生成的注释,因为它们什么都不做,只是为了可读性而引入的。不过,您可以随意删除它们。通常,最好让生成的代码在安静的隔离状态下度过它的生命。@HimBromBeere不,不要删除它们,如果您对表单进行任何更改,您所做的任何编辑都将被覆盖。这是生成的代码,忽略它。同意,让它们继续。设计器代码不是进行OCD清理的地方…你会发疯的。这个控件是供其他开发人员使用的,因此可读性正是我想要实现的,因为它现在看起来很混乱。谢谢,我实际上也找到了一个稍微简单一点的解决方案。我只是将[DesignerSerializer(typeof(CodeDomSerializer),typeof(CodeDomSerializerBase))]添加到我的类中,它不再将其视为序列化的组件。ComponentCodeDomSerializer不仅仅是添加注释。。但对你来说可能已经足够好了。谢谢,实际上我也找到了一个稍微简单一点的解决方案。我只是将[DesignerSerializer(typeof(CodeDomSerializer),typeof(CodeDomSerializerBase))]添加到我的类中,它不再将其视为序列化的组件。ComponentCodeDomSerializer不仅仅是添加注释。。但对你来说可能已经足够好了。