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

时间:2017-07-11 15:05:47

标签: 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.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接口,但我不确定如何修复它。

4 个答案:

答案 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
{ 
...
}