1private void AddCode(Form form)
 2{
 3   IDesignerHost host = null;
 4   host = (IDesignerHost)form.Site.GetService(typeof(IDesignerHost));
 5
 6   //Add method "Form1_Load" on Form1
 7   //---------------------------------------------------------------------------
 8   CodeMemberMethod member = new CodeMemberMethod();
 9   member.Name = "Form1_Load";
10   member.Parameters.Add(new CodeParameterDeclarationExpression("System.Object""sender"));
11   member.Parameters.Add(new CodeParameterDeclarationExpression("System.EventArgs""e"));
12   CodeSnippetExpression sn;
13   sn = new CodeSnippetExpression("MessageBox.Show(\"Hello world\")");
14   member.Statements.Add(sn);
15   member.Attributes = MemberAttributes.Private;
16   CodeTypeDeclaration typedecl = (CodeTypeDeclaration)form.Site.GetService(typeof(CodeTypeDeclaration));
17   typedecl.Members.Add(member);
18   //---------------------------------------------------------------------------
19
20
21   //This code will add the following line to the "InitializeMethod" method
22   // this.Load += new System.EventHandler(this.Form1_Load);
23   //---------------------------------------------------------------------------
24   member = new CodeMemberMethod();
25   foreach (CodeTypeMember typememb in typedecl.Members)
26   {
27       if (typememb.Name == "InitializeComponent")
28       { member = (CodeMemberMethod)typememb; }
29   }

30   CodeDelegateCreateExpression createDelegate1;
31   createDelegate1 = new CodeDelegateCreateExpression(new CodeTypeReference("System.EventHandler"), new CodeThisReferenceExpression(), "Form1_Load");
32   CodeAttachEventStatement attach = new CodeAttachEventStatement(new CodeThisReferenceExpression(), "Load", createDelegate1);
33   member.Statements.Add(attach);
34   typedecl.Members.Add(member);
35   //---------------------------------------------------------------------------
36
37
38   //Add and remove a label because otherwise the code to add the method seems to stay "inactive,
39   //while in this way it works
40   //---------------------------------------------------------------------------
41   Label lbl = (Label)host.CreateComponent(typeof(Label));
42   host.DestroyComponent(lbl);
43   //---------------------------------------------------------------------------
44}
posted on 2008-06-15 01:25  think8848  阅读(409)  评论(1编辑  收藏  举报