事件的响应:

    1. /// <summary>
    2. /// 生成形如
    3. /// this.button1.Click += new System.EventHandler(this.button1_Click);
    4. /// 的代码
    5. /// </summary>
    6. public static CodeStatement GenerateAttachEventStatement(string ctrlName, string eventType, string eventName)
    7. {
    8. return new CodeAttachEventStatement(
    9. new CodePropertyReferenceExpression(
    10. new CodeThisReferenceExpression(), ctrlName),
    11. eventName,
    12. new CodeObjectCreateExpression(eventType,
    13. new CodeExpression[]
    14. {
    15. new CodePropertyReferenceExpression(
    16. new CodeThisReferenceExpression(), ctrlName+"_"+eventName)
    17. }));
    18. }
    1. /// <summary>
    2. /// 生成形如
    3. /// this.button1.Click -= new System.EventHandler(this.button1_Click);
    4. /// 的代码
    5. /// </summary>
    6. public static CodeStatement GenerateRemoveEventStatement(string ctrlName, string eventType, string eventName)
    7. {
    8. return new CodeRemoveEventStatement(
    9. new CodePropertyReferenceExpression(
    10. new CodeThisReferenceExpression(), ctrlName),
    11. eventName,
    12. new CodeObjectCreateExpression(eventType,
    13. new CodeExpression[]
    14. {
    15. new CodePropertyReferenceExpression(
    16. new CodeThisReferenceExpression(), ctrlName+"_"+eventName)
    17. }));
    18. }

    生成文件注释,例如Dispose方法的注释可以这样生成:

    1. DisposeMethod.Comments.Add(new CodeCommentStatement("<summary>\n 清理所有正在使用的资源。\n </summary>\n <param name=\"disposing\">如果应释放托管资源,为 true;否则为 false。</param>", true));

    生成注释为:

    1. /// <summary>
    2. /// 清理所有正在使用的资源。
    3. /// </summary>
    4. /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
    5. protected override void Dispose(bool disposing)
    6. {
    7. ...
    8. }

    最后一步,将CodeDom生成到C#文件需要使用到CSharpCodeProvider。
    代码:

    1. using Microsoft.CSharp;
    2. public static void GenerateCSharpCode(CodeCompileUnit compileunit, string compileName)
    3. {
    4. CSharpCodeProvider provider = new CSharpCodeProvider();
    5. string sourceFile = compileName + "." + provider.FileExtension;
    6. IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), " ");
    7. //设置代码生成选项
    8. CodeGeneratorOptions geneop = new CodeGeneratorOptions();
    9. //括号另起一行
    10. geneop.BracingStyle = "C";
    11. //类成员之间空行
    12. geneop.BlankLinesBetweenMembers = true;
    13. //按类成员添加顺序输出,否则默认类成员在方法前
    14. geneop.VerbatimOrder = true;
    15. provider.GenerateCodeFromCompileUnit(compileunit, tw, geneop);
    16. tw.Close();
    17. }

    完。
    ————————————————
    版权声明:本文为CSDN博主「莱昂纳多达芬奇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/davinciyxw/article/details/7859775