Visual Studio设计视图-窗体为空白

本文关键字:窗体 空白 视图 Studio Visual | 更新日期: 2023-09-27 18:08:58

我有一个c#项目,有两个窗体。所有的编译都很好。当我运行项目时,所有表单都按照预期绘制。

几天前,所有表单的DesignView开始只显示一个空白表单,就像你在新Windows中看到的那样。形式的项目。

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

  1. 没有第三方库,我的项目使用(除了html lagilitypack,这不会导致这个问题在其他Windows。窗体c#项目)
  2. 我已经检查了InitializeComponent函数在每个表单的项目中只有一次
  3. 当我创建一个新项目并添加一个现有的表单(即我的一个有问题的项目表单),设计查看器按预期工作-因此我怀疑我的表单的。cs,。designer .cs和。resx文件是OK的。

在项目设置或其他地方是否有我可能搞砸的东西?

编辑

上面的第三点是误导-我试着为第二种形式创建一个新项目,问题仍然存在。在这里可以找到显示问题的最少量源代码。

Visual Studio设计视图-窗体为空白

您的项目文件已无效。

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

<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. 右键单击已卸载的项目,选择"Edit [ProjectName].csproj"
  4. 做你的修改,然后关闭文件。
  5. 右键单击已卸载的项目,选择"重新加载项目"

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

  • File ->右击-> Exclude from Project

并手动将文件添加回项目

  • Project -> Add -> Existing Item…

对于那些四处寻找却找不到慰藉的人,我有另一个解决方案。我接手的项目代码质量很差,之前的开发人员在他的代码中混合了大小写,因为"它不区分大小写,所以没关系"

因此,虽然PopulateRevs实际上与Visual Basic中的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改为Partmaster.Designer.vb(小写扩展名),它工作了。

所以作为另一个解决方案,虽然Visual Basic不区分大小写,但它看起来像.vbproj文件。如果你被难住了,另一件要确保的事情是你的文件名和.proj文件共享相同的大小写。

(我意识到这被标记为C#,但我在c#中测试过,混合情况也会导致问题)

另一种可能性。我有一组形式都是从一个基本形式派生出来的。我添加了位置保存/还原代码——所有内容都显示为空白。

经过一个小时的折腾,无法发现任何错误,它突然开始在设计器中抛出一个空引用异常,而不仅仅是空白。废话——保存/恢复代码使用了一个设计时不存在的对象。

为什么它一直沉默,然后突然开始尖叫,我不知道。

另一种可能性:我有一个Form的超类,我所有的Form都是从它派生的。我在form.cs文件中定义了这个超类,位于与该文件对应的表单的(部分)类定义之上。这似乎混淆了visual studio,它显示了我的超类的内容(即,一个空表单),而不是对应于文件的表单的内容。解决方案是将超类的定义移动到另一个不是表单设计器文件的文件中。

另一种可能:设计师似乎试图在。h文件中设计第一个类,而不管它的名字是什么。我在实际的表单类之前有一个空的前向ref类声明,它试图使用它。

如果启动表单为空白且没有编译错误。检查你的Program.cs文件是否运行正确的Form,否则它将运行一个没有上下文的Form,并且显示为空白。

在这种情况下,Program.cs文件看起来应该像这样:

using System;
using System.Windows.Forms;
namespace Form_Test
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new StartForm());
        }
    }
}

该应用程序。运行(新 StartForm ());需要指定正确。

这是一个为我工作的修复:在问题发生之前,我将构造函数中的InitializeComponent()的名称更改为Initialize()。一旦我把它改回InitializeComponent(),它修复了这个问题,窗体再次可见。