Visual Studio设计视图 - 表单为空白

时间:2015-08-20 09:39:19

标签: c# winforms visual-studio-2012

我有一个包含两种表单的C#项目。所有编译都很好。当我运行项目时,所有表单都按预期绘制。

几天前,所有表单的DesignView开始只显示空白表单,就像您在新的Windows.Forms项目中获得的表单一样。

我在SO上遇到了类似问题的几个问题,以下是对这些问题的评论:

  1. 我的项目没有第三方库(除了htmlAgilityPack,在其他Windows.Forms C#项目中不会导致此问题)
  2. 我已经检查过InitializeComponent函数在每个表单的项目中只有一次
  3. 当我创建一个新项目并添加一个现有表单(即我的一个有问题的项目表单)时,Design Viewer按预期工作 - 因此我怀疑我的表单的.cs,.Designer.cs和.resx文件没关系
  4. 我可以在项目设置或其他地方搞砸了吗?

    修改

    上面的第三点是误导性的 - 我尝试为第二种形式创建一个新项目,并且问题仍然存在。显示问题的最少量源代码是here

6 个答案:

答案 0 :(得分:16)

您的项目文件已无效。

表单的有效项目条目如下所示:

<Compile Include="Form1.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
  <DependentUpon>Form1.cs</DependentUpon>
</Compile>

你们虽然缺少DependentUpon行 - 这就是代码和设计器文件在项目中单独出现而不是连接的原因:

<Compile Include="mainForm.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="mainForm.Designer.cs" />

如果添加缺失的行,表单将在设计模式下正确显示:

<Compile Include="mainForm.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="mainForm.Designer.cs">
  <DependentUpon>mainForm.cs</DependentUpon>
</Compile>

整理资源文件:

<EmbeddedResource Include="mainForm.resx">
  <DependentUpon>mainform.cs</DependentUpon>
</EmbeddedResource>

为了解决这个问题,您只需在编辑器中编辑csproj,或者在Visual Studio中执行此操作:

  1. 备份文件
  2. 右键单击该项目,然后选择“卸载项目”
  3. 右键单击已卸载的项目,然后选择“编辑[ProjectName] .csproj”
  4. 进行更改,然后关闭文件。
  5. 右键单击已卸载的项目,然后选择“重新加载项目”

答案 1 :(得分:1)

我通过删除与该表单相关联的所有文件来解决问题

  • 文件 - &gt;右键单击 - &gt;从项目中排除

并手动将文件添加回项目

  • 项目 - &gt;添加 - &gt;现有项目......

答案 2 :(得分:0)

另一种可能性。我有一组形式都来自基本形式。我添加了位置保存/恢复代码 - 所有内容都是空白的。

经过一个小时的乱搞并且无法找到任何错误之后,它突然开始在设计器中抛出一个空引用异常,而不仅仅是空白。 Duh - 保存/恢复代码使用了一个不存在设计时的对象。

为什么它对此保持沉默然后突然开始嘎嘎叫我不知道。

答案 3 :(得分:0)

对于那些四处搜寻并找不到安慰的人,我有另一个解决方案。我继承的项目具有可怕的代码质量,之前的开发人员在他的代码中混合了大小写,因为&#34;它不区分大小写,所以它并不重要&#34;

因此,虽然df['proj'].split('_')[1] > AttributeError: 'Series' object has no attribute 'split' df['proj'].str.split('_')[1] > TypeError: can only concatenate list (not "str") to list 实际上与Visual Basic中的PopulateRevs相同,但这种懒惰会导致问题。即:

POpulateREvs

我在<Compile Include="Inventory\Partmaster.Designer.Vb"> <DependentUpon>Partmaster.vb</DependentUpon> </Compile> <Compile Include="Inventory\Partmaster.vb"> <SubType>Form</SubType> </Compile> 文件中看到这个,同时查看其他无法解决的解决方案。我碰巧将.vbproj更改为Partmaster.Designer.Vb(小写扩展名)并且有效。

因此,作为另一种解决方案,虽然Visual Basic不区分大小写,但它看起来像Partmaster.Designer.vb文件。如果您感到难过,另一件事就是确保您的文件名和.vbproj文件共享相同的案例。

(我意识到这是标记为.proj,但我在C#中对此进行了测试,并且混合大小写也会导致问题。)

答案 4 :(得分:0)

另一种可能性:我有一个超类的Form,我的所有表单都来自于它。我已经在我的一个form.cs文件中定义了这个超类,在该文件对应的表单的(部分)类定义上方。这似乎使Visual Studio感到困惑,并且它正在显示我的超类的内容(即空表格)而不是与文件相对应的表格内容。解决方案是将超类的定义移到不是表单设计器文件的其他文件中。

答案 5 :(得分:0)

另一种可能性: 无论其名称是什么,设计人员似乎都试图设计.h文件中的第一类。 在实际的表单类之前,我只是有一个空的forward ref类声明,并且它尝试使用该声明。