在我的应用程序中,我使用ScintillaNET DLL并创建了一个名为BufferedScintilla的类,我继承控件并对其进行双缓冲。没有什么不寻常的,只是正常的C#继承...比,我修改了我的表单的Designer.cs文件,并从使用ScintillaNET.Scintilla()切换到BufferedScintilla()。
应用程序加载并正常工作但是Visual Studio 2013设计器无法加载,告诉我"无法将类型为BufferedScintilla的对象转换为ScintillaNET.Scintilla类型。 我尝试了所有方法,清理了解决方案并重新构建,仅重建,调试,关闭和重新启动Visual Studio甚至重新启动PC,但没有任何帮助...... Visual Studio Designer拒绝让我设计我的表单。
同样,应用程序运行FINE,我确信表单上的控件是新的BufferedScintilla,而不是ScintillaNET.Scintilla,因为我可以看到效果(它是双缓冲的,我正在绘制的自定义图形不要再闪烁了),所以我100%确定应用程序与继承的组件一起运行。
我确信这是某种Visual Studio的小漏洞,所以我正在寻找一个解决方案让它让我再次设计我的应用程序。
编辑:澄清一下,Visual Studio 2013 Update 1和Visual Studio 2010也会发生同样的事情。我检查了程序集,它是作为Any CPU构建的,所以Visual Studio设计器应该没问题......
编辑:由于似乎无法修复此问题(某种错误),我希望在构建项目之前自动替换Designer.cs文件中的行,然后在项目之后建造(或不建造)。是否有任何Visual Studio工具在构建项目之前按下Build按钮后自动替换类中的某些文本,并且在构建之后?我想替换构造函数和声明,以便在设计时它是ScintillaNET.Scintilla,并且在运行时它是BufferedScintilla。谢谢!
提前致谢!
瓦利
答案 0 :(得分:3)
我遇到了与此非常相似的问题。在我的情况下,设计器仍然使用构造函数和为控件和表单设置的加载事件。在我的情况下,我使用的是一个在设计时没有设置过的变量,所以为了解决这个问题,你必须修改你的代码来做这样的事情......
if(this.DesignMode)
{
//DoSomething();
}
else
{
//DoSomethingElse();
}