2014-04-09 105 views
4

在我的应用程序中,我使用ScintillaNET DLL并创建了一个名为BufferedScintilla的类,我继承了该控件并对其进行双缓冲。没什么不寻常的,只是普通的C#继承...比我修改了我的表单的Designer.cs文件,并从使用ScintillaNET.Scintilla()切换到BufferedScintilla()。Visual Studio Designer无法加载

该应用程序加载并正常工作正常,但Visual Studio 2013设计器无法加载,告诉我“无法投入BufferedScintilla类型的对象键入ScintillaNET.Scintilla。”我尝试了一切,清理解决方案并重建,重建调试,关闭并重新启动Visual Studio,甚至重新启动PC,但没有任何帮助...... Visual Studio Designer拒绝让我设计我的表单。

此外,该应用程序运行FINE,我相信窗体上的控件是新的BufferedScintilla,而不是ScintillaNET.Scintilla,因为我可以看到效果(它是双缓冲的,我绘制的自定义图形不再闪烁),所以我100%确定应用程序运行与继承的组件

我相信这是某种Visual Studio的小缺陷,所以我正在寻找一种解决方案让它能让我再次设计我的应用程序。

编辑:澄清,同样的事情也发生在Visual Studio 2013更新1和Visual Studio 2010中。我检查了大会,它是内置任何CPU,所以应该没有与Visual Studio设计师的问题...

编辑:因为它似乎不可能解决这个问题(某种错误),我在构建项目之前自动替换Designer.cs文件中的行,然后在构建项目(或不构建项目)之后寻找forwar。是否有任何Visual Studio工具会在项目构建之前以及构建之后按下“构建”按钮后自动替换类中的某些文本?我想替换构造函数和声明,以便在设计时它是ScintillaNET.Scintilla,并且在运行时它是BufferedScintilla。谢谢!

在此先感谢!

瓦利

+0

东西考虑一下,visual studio是一个32位的进程。如果您将包含表单组件的任何库构建为64位库,Visual Studio将无法加载它们并在设计器中使用它们。一切都会编译得很好,你将能够引用64位库,只是不在设计器中使用它们。 –

+0

是的,我也是这么想的。不幸的是这不是问题... –

回答

3

我碰到的非常相似,这是一个问题,在我的情况下,设计师依旧采用了构造函数和加载事件是设置为控制和形式。就我而言,我是使用在设计时是从来没有设置一个变量,所以去解决这一点,你将不得不修改你的代码做这样的事情......你可能想

if(this.DesignMode) 
{ 
    //DoSomething(); 
} 
else 
{ 
    //DoSomethingElse(); 
} 
相关问题