日期:2014-05-20  浏览次数:20761 次

动态生成类时的问题,请看这段代码
先看下面的一段代码,意思就是动态生成一个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?
没试出有什么问题,出错的代码呢?