CodeDom使用笔记(三)
来源:互联网 发布:淘宝外贸原单鞋店推荐 编辑:程序博客网 时间:2024/05/29 02:52
InitializeComponent方法是Visual Studio设计器自动生成的,注释中也有警告除非必要不要修改里面的代码,因为在改变页面设计后,所做的修改会被覆盖。
但是要生成代码就需要写出这里面的代码了,InitializeComponent方法内容分下面几部分:
1.组件容器components初始化
2.控件生成&设置属性(部分控件需要SuspendLayout,防止属性设置过程中造成闪烁)
3.画面本身生成&属性设置
4.部分控件ResumeLayout
例如,CodeDom代码如下:
// this.components = new System.ComponentModel.Container();CodeStatement createComponents = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "components"),new CodeObjectCreateExpression("System.ComponentModel.Container", new CodeExpression[]{}));cmm.Statements.Add(createComponents);//this.groupBox1 = new GroupBox(this.components);CodeStatement create = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), groupBox.Name),new CodeObjectCreateExpression("GroupBox",new CodeExpression[] {new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "components")}));cmm.Statements.Add(create);//((System.ComponentModel.ISupportInitialize)(this.groupBox1)).BeginInit();CodeStatement beginInit new CodeMethodInvokeExpression(new CodeCastExpression("System.ComponentModel.ISupportInitialize",new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName)),"BeginInit",new CodeExpression[] { }); cmm.Statements.Add(beginInit);//this.groupBox1.SuspendLayout();CodeStatement suspendLayout = new CodeMethodInvokeExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName),"SuspendLayout",new CodeExpression[] { });cmm.Statements.Add(suspendLayout);//this.groupBox1.Appearance.BackColor = System.Drawing.SystemColors.Control;CodeStatement backColor = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "Appearance.BackColor"),new CodeSnippetExpression("System.Drawing.SystemColors.Control"));cmm.Statements.Add(backColor);//this.groupBox1.Appearance.Options.UseBackColor = true;CodeStatement useBackColor = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "Appearance.Options.UseBackColor"),new CodeSnippetExpression("true"));cmm.Statements.Add(useBackColor);//Controls.Addforeach (Control ctrl in groupBox.Controls){CodeStatement addControl = new CodeMethodInvokeExpression(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "Controls"), "Add",new CodeExpression[] { new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), childName)});cmm.Statements.Add(addControl);}//this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;CodeStatement dock = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "Dock"),new CodePropertyReferenceExpression(new CodeTypeReferenceExpression("System.Windows.Forms.DockStyle"), "Fill")); cmm.Statements.Add(dock);//this.groupBox1.Location = new System.Drawing.Point(242, 54);CodeStatement location = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "Location"),new CodeObjectCreateExpression(new CodeTypeReference("System.Drawing.Point"),new CodeExpression[]{new CodePrimitiveExpression(242),new CodePrimitiveExpression(54)})); cmm.Statements.Add(location);//this.groupBox1.Name = "groupBox1";CodeStatement name = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "Name"),new CodePrimitiveExpression("groupBox1"));cmm.Statements.Add(name);//this.groupBox1.Size = new System.Drawing.Size(233, 42);CodeStatement size = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "Size"),new CodeObjectCreateExpression(new CodeTypeReference("System.Drawing.Size"),new CodeExpression[]{new CodePrimitiveExpression(233),new CodePrimitiveExpression(42)}));cmm.Statements.Add(size);//this.groupBox1.TabIndex = 7;CodeStatement tabIndex = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "TabIndex"),new CodePrimitiveExpression(7)); cmm.Statements.Add(tabIndex);//this.groupBox1.Text = "groupBox1";CodeStatement text = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName), "Text"),new CodePrimitiveExpression("groupBox1"));cmm.Statements.Add(text);//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;CodeStatement autoScaleMode = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "AutoScaleMode"),new CodePropertyReferenceExpression(new CodeTypeReferenceExpression("System.Windows.Forms.AutoScaleMode"), "Inherit"));cmm.Statements.Add(autoScaleMode);//this.ClientSize = new System.Drawing.Size(534, 470);CodeStatement clientSize = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "ClientSize"),new CodeObjectCreateExpression(new CodeTypeReference("System.Drawing.Size"),new CodeExpression[]{new CodePrimitiveExpression(534),new CodePrimitiveExpression(470)}));cmm.Statements.Add(clientSize);//this.groupBox1.Controls.Add(XXX);CodeExpression ctrls = new CodeMethodInvokeExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Controls"), "Add",new CodeExpression[]{new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrl.Name)});cmm.Statements.Add(ctrls);//this.Name = "Form2";CodeStatement name = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Name"),new CodePrimitiveExpression(winForm.Text));cmm.Statements.Add(name);//this.Text = "Form2";CodeStatement text = new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Text"),new CodePrimitiveExpression(winForm.Text));cmm.Statements.Add(text);//((System.ComponentModel.ISupportInitialize)(this.group2)).EndInit();CodeStatement new CodeMethodInvokeExpression(new CodeCastExpression("System.ComponentModel.ISupportInitialize",new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName)),"EndInit",new CodeExpression[] { }); //this.group2.ResumeLayout(false);CodeStatement resumeLayout = new CodeMethodInvokeExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), ctrlName),"ResumeLayout",new CodeExpression[] { new CodeSnippetExpression("false") });cmm.Statements.Add(resumeLayout);//this.ResumeLayout(false);CodeExpression resumeLayout = new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), "ResumeLayout", new CodeExpression[]{new CodeSnippetExpression("false")});cmm.Statements.Add(resumeLayout);其中ctrlName都是“groupBox1”。
每部分生成的代码就是上面的注释部分。
当然可以考虑将一些通用的属性设置提取为公用方法,如Name, Text, Location, Size, TabIndex等等。
- CodeDom使用笔记(三)
- CodeDom使用笔记(一)
- CodeDom使用笔记(二)
- CodeDom使用笔记(四)
- 微软CodeDom模型学习笔记(三)
- CodeDom使用
- CodeDom使用心得
- CodeDom使用心得
- CodeDom使用心得
- CodeDom
- 使用CodeDom执行动态代码
- 使用CodeDom生成程序集
- 使用CodeDom生成程序集
- codeDom命名空间的使用
- 使用CodeDom生成程序集
- 微软CodeDom模型学习笔记(一)
- 微软CodeDom模型学习笔记(二)
- 微软CodeDom模型学习笔记(四)
- 一个无限的比特流每次只能读一个比特 判断当前的数是不是被3整除
- xCode4里面设置NSZombieEnabled
- 调试由URL scheme启动的进程
- C#自定义控件简介(二)
- STL学习笔记
- CodeDom使用笔记(三)
- ubuntu sudo权限错误的解决方法
- thinkphp多图片上传(插入数据库,并且不出现覆盖现象)
- html5游戏开发-愤怒的小鸟-开源讲座(二)-跟随小鸟的镜头
- java swing图像放大、缩小、剪切
- 经典SQL语句大全之(数据开发,管理常识)
- 这些年,我收集的JavaScript代码(一)
- linux下查看进程内存使用情况
- QAction使用