【发布时间】:2014-01-29 17:08:56
【问题描述】:
在自定义 CodeDomSerializer 中,您可以为类添加自定义成员(例如事件处理方法)。
生成的成员总是以 Form1.cs 而不是 Form1.designer.cs 结束。 有没有办法在设计器文件的部分类中插入生成器方法?
(方法的内容会自动生成,请勿触碰。)
添加方法示例:
public class MasterDetailControlSerializer : CodeDomSerializer
{
public override object Serialize(IDesignerSerializationManager manager, object value)
{
var baseClassSerializer = manager.GetSerializer(typeof(MasterDetailControl).BaseType, typeof(CodeDomSerializer)) as CodeDomSerializer;
var r = (CodeStatementCollection)baseClassSerializer.Serialize(manager, value);
var masterDetailControl = (MasterDetailControl)value;
var method = new CodeMemberMethod();
method.Name = masterDetailControl.Name + "_InitializeDetailComponent";
method.Parameters.AddRange(new[] { new CodeParameterDeclarationExpression(typeof(object), "sender"), new CodeParameterDeclarationExpression(typeof(InitializeDetailComponentEventArgs), "e") });
method.Attributes = MemberAttributes.Private;
var type = manager.GetService<CodeTypeDeclaration>();
type.Members.Add(method);
r.Add(new CodeAttachEventStatement(
new CodeEventReferenceExpression(base.GetExpression(manager, masterDetailControl), "InitializeDetailComponent"),
new CodeDelegateCreateExpression(
new CodeTypeReference(typeof(EventHandler<InitializeDetailComponentEventArgs>)),
new CodeThisReferenceExpression(),
method.Name
)));
return r;
}
}
【问题讨论】:
标签: winforms serialization codedom