1
using System;
2
using System.CodeDom;
3
using System.CodeDom.Compiler;
4
using Microsoft.CSharp;
5
using System.IO;
6![](/Images/OutliningIndicators/None.gif)
7
namespace CodeDomFacade
8
{
9
/// <summary>
10
/// 该类封装了CodeCom相关操作,方便外部使用
11
/// </summary>
12
public class CodeDomHelper
13
{
14![](/Images/OutliningIndicators/InBlock.gif)
15
protected CodeCompileUnit _CodeRoot;
16
protected CodeNamespace _cn;
17
protected CodeDomProvider _provider;
18
protected string _strFileName;
19
protected CodeTypeDeclaration _ctdClass;
20![](/Images/OutliningIndicators/InBlock.gif)
21
public CodeDomHelper()
22
{
23
_CodeRoot=new CodeCompileUnit();
24
_ctdClass=new CodeTypeDeclaration();
25
}
26![](/Images/OutliningIndicators/InBlock.gif)
27
/// <summary>
28
/// 生成代码输出到文件
29
/// </summary>
30
public void GenerateCode()
31
{
32
try
33
{
34
// Obtain an ICodeGenerator from a CodeDomProvider class.
35
ICodeGenerator gen = _provider.CreateGenerator();
36
// Create a TextWriter to a StreamWriter to an output file.
37
IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(_strFileName, false), " ");
38
// Generate source code using the code generator.
39
gen.GenerateCodeFromCompileUnit(_CodeRoot, tw, new CodeGeneratorOptions());
40
// Close the output file.
41
tw.Close();
42
}
43
catch(System.Exception e)
44
{
45
throw e;
46
}
47
}
48![](/Images/OutliningIndicators/InBlock.gif)
49
/// <summary>
50
/// 生成C#代码
51
/// </summary>
52
public void GenerateCSharpCode()
53
{
54
_provider=new CSharpCodeProvider();//设定生成代码为C#代码
55
GenerateCode();//生成代码,写入指定文件
56
}
57
/// <summary>
58
/// 设置代码命名空间
59
/// </summary>
60
/// <param name="name">命名空间名字</param>
61
public void DefineNameSpace(string name)
62
{
63
try
64
{
65
_cn=new CodeNamespace(name);
66
_CodeRoot.Namespaces.Add(_cn);
67
}
68
catch(System.Exception e)
69
{
70
throw e;
71
}
72
}
73![](/Images/OutliningIndicators/InBlock.gif)
74
/// <summary>
75
/// 添加引用命名空间
76
/// </summary>
77
/// <param name="name">被引用命名空间名字</param>
78
public void AddImportNameSpace(string name)
79
{
80
try
81
{
82
_cn.Imports.Add(new CodeNamespaceImport(name));
83
}
84
catch(System.Exception e)
85
{
86
throw e;
87
}
88
}
89![](/Images/OutliningIndicators/InBlock.gif)
90
/// <summary>
91
/// 添加一个类
92
/// </summary>
93
/// <param name="classname">类名</param>
94
public void AddClass(string classname)
95
{
96
try
97
{
98
_ctdClass.Name=classname;
99
_cn.Types.Add(_ctdClass);
100
}
101
catch(System.Exception e)
102
{
103
throw e;
104
}
105
}
106![](/Images/OutliningIndicators/InBlock.gif)
107
/// <summary>
108
/// 添加一个方法到类
109
/// </summary>
110
/// <param name="methodname">方法名</param>
111
/// <param name="returntype">返回值类型,如"System.Int32"</param>
112
/// <param name="visit">访问控制类型"public" or "private"</param>
113
public CodeMemberMethod AddMethod(string methodname,string returntype,string visit)
114
{
115
CodeMemberMethod cmm=new CodeMemberMethod();
116
try
117
{
118
cmm.Name=methodname;
119
cmm.ReturnType =new CodeTypeReference(returntype);
120
switch(visit)
121
{
122
case "public":
123
cmm.Attributes=MemberAttributes.Public|MemberAttributes.Final;
124
break;
125
case "private":
126
cmm.Attributes=MemberAttributes.Private|MemberAttributes.Final;
127
break;
128
default:
129
cmm.Attributes=MemberAttributes.Private|MemberAttributes.Final;
130
break;
131
}
132
133
_ctdClass.Members.Add(cmm);
134
}
135
catch(System.Exception e)
136
{
137
throw e;
138
}
139
return cmm;
140
}
141![](/Images/OutliningIndicators/InBlock.gif)
142
/// <summary>
143
/// 添加带有普通的get/set操作属性
144
/// </summary>
145
/// <param name="pname">属性名</param>
146
/// <param name="returntype">返回值类型</param>
147
/// <param name="visit">访问控制类型</param>
148
/// <param name="fieldname">访问字段名</param>
149
/// <returns>返回添加的属性,待以后操作,如添加原代码段</returns>
150
public CodeMemberProperty AddProperty(string pname,string returntype,string visit,string fieldname)
151
{
152
CodeMemberProperty cmp=new CodeMemberProperty();
153
try
154
{
155
cmp.Name=pname;
156
cmp.Type=new CodeTypeReference(returntype);
157
switch(visit)
158
{
159
case "public":
160
cmp.Attributes=MemberAttributes.Public|MemberAttributes.Final;
161
break;
162
case "private":
163
cmp.Attributes=MemberAttributes.Private|MemberAttributes.Final;
164
break;
165
default:
166
cmp.Attributes=MemberAttributes.Private|MemberAttributes.Final;
167
break;
168
}
169
//添加get操作代码
170
cmp.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),fieldname)));
171
//添加set操作代码
172
cmp.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),fieldname),new CodePropertySetValueReferenceExpression()));
173
_ctdClass.Members.Add(cmp);
174
}
175
catch(System.Exception e)
176
{
177
throw e;
178
}
179
return cmp;
180
}
181![](/Images/OutliningIndicators/InBlock.gif)
182
/// <summary>
183
/// 添加字段
184
/// </summary>
185
/// <param name="name">字段名</param>
186
/// <param name="type">字段类型</param>
187
/// <param name="visit">访问控制类型</param>
188
/// <param name="IsCreateProperty">是否生成对应属性</param>
189
public void AddField(string name,string type,string visit,bool IsCreateProperty)
190
{
191
CodeMemberField cmf=new CodeMemberField(type,name);
192
try
193
{
194
switch(visit)
195
{
196
case "public":
197
cmf.Attributes=MemberAttributes.Public|MemberAttributes.Final;
198
break;
199
case "private":
200
cmf.Attributes=MemberAttributes.Private|MemberAttributes.Final;
201
break;
202
default:
203
cmf.Attributes=MemberAttributes.Private|MemberAttributes.Final;
204
break;
205
}
206
_ctdClass.Members.Add(cmf);
207
if(IsCreateProperty)
208
{
209
if(name.IndexOf("_")>0)
210
AddProperty(name.Replace("_",""),type,"public",name);
211
else
212
AddProperty("p" + name,type,"public",name);
213
}
214
}
215
catch(System.Exception e)
216
{
217
throw e;
218
}
219
}
220![](/Images/OutliningIndicators/InBlock.gif)
221
/// <summary>
222
/// 从指定文件获取代码
223
/// </summary>
224
/// <param name="filename">文件路径(包含名称)</param>
225
/// <returns></returns>
226
public string GetCodeFormFile(string filename)
227
{
228
try
229
{
230
StreamReader sr = new StreamReader(filename);
231
string result = sr.ReadToEnd();//读取文件内容到文本框
232
sr.Close();
233
return result;
234
}
235
catch(System.Exception e)
236
{
237
throw e;
238
return "读取文件出错";
239
}
240
}
241![](/Images/OutliningIndicators/InBlock.gif)
242
/// <summary>
243
/// 添加原代码片断
244
/// </summary>
245
/// <param name="cmm">要添加的地方,如方法,入口点,结构等</param>
246
/// <param name="strCode">具体代码</param>
247
public void AddCodeSnippet(CodeMemberMethod cmm,string strCode)
248
{
249
try
250
{
251
CodeSnippetStatement codebody = null;
252
codebody = new CodeSnippetStatement(strCode);
253
cmm.Statements.Add(codebody);
254
}
255
catch(System.Exception e)
256
{
257
throw e;
258
}
259
}
260
相关属性
321
}
322
}
323![](/Images/OutliningIndicators/None.gif)
最近在看CodeDom,发现其类层次很多,而且很复杂,所以写了一个Farade模式的类,希望在以后的开发中简化使用CodeDom,但由于时间有限,所以功能不够完善,也许要在以后使用中不断完善。
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
57
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
72
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
88
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
105
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
139
![](/Images/OutliningIndicators/InBlock.gif)
140
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/InBlock.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
189
![](/Images/OutliningIndicators/InBlock.gif)
190
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
191
![](/Images/OutliningIndicators/InBlock.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
196
![](/Images/OutliningIndicators/InBlock.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/InBlock.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/InBlock.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
209
![](/Images/OutliningIndicators/InBlock.gif)
210
![](/Images/OutliningIndicators/InBlock.gif)
211
![](/Images/OutliningIndicators/InBlock.gif)
212
![](/Images/OutliningIndicators/InBlock.gif)
213
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
214
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
215
![](/Images/OutliningIndicators/InBlock.gif)
216
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
219
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
222
![](/Images/OutliningIndicators/InBlock.gif)
223
![](/Images/OutliningIndicators/InBlock.gif)
224
![](/Images/OutliningIndicators/InBlock.gif)
225
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
226
![](/Images/OutliningIndicators/InBlock.gif)
227
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
230
![](/Images/OutliningIndicators/InBlock.gif)
231
![](/Images/OutliningIndicators/InBlock.gif)
232
![](/Images/OutliningIndicators/InBlock.gif)
233
![](/Images/OutliningIndicators/InBlock.gif)
234
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/InBlock.gif)
239
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
240
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
241
![](/Images/OutliningIndicators/InBlock.gif)
242
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
243
![](/Images/OutliningIndicators/InBlock.gif)
244
![](/Images/OutliningIndicators/InBlock.gif)
245
![](/Images/OutliningIndicators/InBlock.gif)
246
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
247
![](/Images/OutliningIndicators/InBlock.gif)
248
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
249
![](/Images/OutliningIndicators/InBlock.gif)
250
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
251
![](/Images/OutliningIndicators/InBlock.gif)
252
![](/Images/OutliningIndicators/InBlock.gif)
253
![](/Images/OutliningIndicators/InBlock.gif)
254
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
257
![](/Images/OutliningIndicators/InBlock.gif)
258
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
259
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
260
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
321
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
322
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
323
![](/Images/OutliningIndicators/None.gif)