Microsoft" WinForms系列1:图形设备"

时间:2013-12-09 21:51:56

标签: xna c# winforms

我遇到this sample的问题。我刚下载并运行它(Visual Studio 2010)。 我没有触及任何内容enter image description here

对不起语言,它是意大利语。 从上到下,它说:

  • 为了避免在加载设计器窗口之前丢失信息,有必要解决这些错误:
  • 无法将设计器Windows可视化为文件,因为无法设计类。设计器实用程序已经检查了这些类:SpinningTriangleControl --- 无法加载其基类“WinFormsGraphicsDevice.GraphicsDeviceControl”。验证是否存在对程序集的引用以及是否已生成所有项目。
  • 下面说的是相同的

请注意:

  • 如果我编译并运行,它就可以工作。
  • 在ide的工具栏中,有时(我什么时候不知道),有两个控件用SpinningTriangleControl和SpriteFont创建;有时他们会消失。发生这种情况时,控件也会从项目的MainWindow表单中删除!
  • 我不知道它是否重要,但我注意到控件经常消失,并在我添加一些新控件(例如toolstripmenu等)时将其从xxx.designer.cs中移除或者我添加了一些新的事件处理程序来进行控制。

我真的不明白发生了什么。

由JT编辑: repro在这里:sdrv.ms/1kIhI5o

Repro步骤:

开放解决方案
选择flowLayoutPanel1控件
运行应用程序
停止申请
现在尝试选择gameWrapper!

结果:
无法再选择gameWrapper控件,它甚至不会显示在表单控件的Property Windows下拉列表中!

7 个答案:

答案 0 :(得分:1)

这种情况偶尔发生在我身上。唯一有效的方法是从窗口中删除自定义控件,然后再次添加。

答案 1 :(得分:1)

我已经看到过这种情况会发生在几种情况下。

1)项目获得对自己的引用。

如果您在项目A中有一个usercontrol,并使用该设计将usercontrol添加到项目A中的表单,Visual Studio将添加一个自引用,这将搞砸设计师。

2)为可视元素创建一个抽象基类。

由于无法实例化抽象类,设计器将无法在设计器中创建要渲染的实例。

3)DesignMode bug

如果您使用DesignMode属性来确定UserControls是否应该在Load()之类的事件中加载数据,那么您需要知道如果您将控件嵌套多个深度,DesignMode将会中断。你可以通过键入LicenseManager.UsageMode创建自己的designmode变量来解决这个问题。

答案 2 :(得分:1)

我在你的问题中添加了重复步骤,并且遇到了问题的一半。

Repro步骤:
 1.开设解决方案
 2.选择flowLayoutPanel1控件
 3.请求申请书  4.停止了申请

然后我无法选择gameWrapper控件! gameWrapper控件甚至没有显示在Property Window的表单控件下拉列表中!

我尝试按照您提到的方式添加控件导致问题,我甚至添加了SpinningTriangleControl.cs 用户控件,该控件在屏幕截图中显示为问题 (但它不是' t已包含在上传的repro解决方案中

要重现无法根据屏幕截图打开的SpinningTriangleControl.cs用户控件,您只需省略using OhmGame_Level_editor;命名空间参考

enter image description here

enter image description here

添加using OhmGame_Level_editor;允许我打开SpinningTriangleControl.cs用户控件而不会出现设计器错误。

  

它必须是一个XNA / Visual Studio错误 - 如何控制除了   选择gameWrapper然后运行/停止后   应用程序gameWrapper控件是可见的但不能   选择!

解决方法:
我发现当我打开解决方案并锁定gameWrapper控件时,无论是否在运行/停止应用程序时选择它,我都可以选择它。

enter image description here

答案 3 :(得分:0)

通常在创建自定义控件时会出现此类问题。为此构建WinFormsGraphicsDevice并将生成的exe粘贴到您正在使用的Visual Studio版本的以下路径。

C:\ Program Files \ Microsoft Visual Studio \ Common7 \ IDE

重新启动Visual Studio并查看此问题是否已解决。我遇到自定义控件的问题,并以这种方式修复它。希望它也适合你。

答案 4 :(得分:0)

这似乎是由错误的引用造成的。请尝试以下方法: 关闭所有文件。 清理解决方案并重建。 然后找到定义GraphicsDeviceControl类的项目或dll。 删除参考。 重新添加引用,重建。 尝试再次打开控件。

答案 5 :(得分:0)

你应该尝试抛出一些尝试/捕获并使用断点并用它来查找异常。另外我认为你的问题是指像GUI组件一样的东西,如SpriteFont,ContentManager,GraphicsDevice ...例如:

content = new ContentManager(Services, "Content"); 

spriteBatch = new SpriteBatch(GraphicsDevice); 

font = content.Load<SpriteFont>("fontName"); // make sure font was loaded fine.

答案 6 :(得分:0)

我在设计器中遇到了一个问题,其形式继承自其他形式。 设计师根本不想显示它们。 在我的情况下,设计师迷失了,因为没有没有参数的构造函数。编译和执行的代码很好,因为我使用了带有1个参数的构造函数。为了整理一下代码,我尝试删除没有参数的构造函数,但我不得不把它放回去让设计师工作。 您可以尝试在inherited和base控件中设置一个不带参数的构造函数。