动态生成类时的问题,请看这段代码
先看下面的一段代码,意思就是动态生成一个Object类casualObj,然后把一个PropertyGrid的SelectedObject属性设置为这个类,在这个PropertyGrid上会出现一个Image项,设置其属性时是通过一个文件对话框选择一个文件,然后返回路径。
ICodeCompiler compiler = (new CSharpCodeProvider()).CreateCompiler();
CompilerParameters cp = new CinoukerOaraneters();
cp.ReferencedAssemblies.Add( "System.dll ");
cp.ReferencedAssemblies.Add( "System.Design.dll ");
cp.ReferencedAssemblies.Add( "System.Drawing.dll ");
cp.ReferencedAssemblies.Add( "System.Drawing.Design.dll ");
cp.ReferencedAssemblies.Add( "System.Windows.Forms.dll ");
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
StringBuilder code = new StringBuilder();
code.AppendLine( "namespace GetControl{ ");
code.AppendLine( "public class PtyClass{ ");
strBuilder.AppendLine( "private System.String _Image; ");
strBuilder.AppendLine( "[System.ComponentModel.Editor(typeof(System.Windows.Forms.Design.FileNameEditor),typeof(System.Drawing.Design.UITypeEditor))] ");
strBuilder.AppendLine( "public System.String Image{ ");
strBuilder.AppendLine( "get { return _Image;} ");
strBuilder.AppendLine( "set { _Image = value;} ");
strBuilder.AppendLine( "} ");
code.AppendLine( "}} ");
CompilerResults cr = compiler.CompileAssemblyFromSource(cp, code.ToString());
Assembly a = cr.CompiledAssembly;
Object casualObj = a.CreateInstance( "GetControl.PtyClass ");
PropertyGrid1.SelectedObject = casualObj;
现在的问题是,当我没有更改这个Image属性时,无论我生成这个casualObj多少次都不会出错,而一旦我在PropertyGrid中更改了这个Image属性,然后再次执行这段代码的时候就会出现异常,好像是System.Windows.Forms.Design.FileNameEditor这个引用一经使用,便不能再次使用它来生成对象,如果把
strBuilder.AppendLine( "[System.ComponentModel.Editor(typeof(System.Windows.Forms.Design.FileNameEditor),typeof(System.Drawing.Design.UITypeEditor))] ");
这一行删掉便不会有任何问题,但也实现不了我上面所说的功能。
请问这个问题该如何解决?
------解决方案--------------------帮LZ顶
http://user.qzone.qq.com/31767702
------解决方案--------------------怎么一会code一会strBuilder?
没试出有什么问题,出错的代码呢?