我有一个有两个窗体的C#项目。所有窗体都编译得很好。当我运行该项目时,所有窗体都按预期绘制。
几天前,所有窗体的DesignView开始只显示一个空白窗体,就像您在一个新的Windows.Forms项目中看到的一样。
我已经通过了几个关于SO的问题与一个类似的问题,这里是对这些问题的评论:
1.我的项目没有使用第三方库(除了htmlAgilityPack,它在其他Windows.Forms C#项目中不会导致此问题)
1.我已经检查过InitializeComponent函数在项目中对于每个窗体只有一次
1.当我创建新项目并添加现有窗体(即我的一个有问题的项目窗体)时,设计查看器按预期工作-因此我怀疑窗体的.cs、.Designer.cs和.resx文件没有问题。
在项目设置或其他地方是否有我可能搞砸的东西?
编辑
上面的第三点是误导性的--我试着为第二个表单创建一个新项目,但问题仍然存在。显示问题的最小源代码量是here。
8条答案
按热度按时间i7uq4tfw1#
您的项目文件已无效。
表单的有效项目条目如下所示:
但是您的代码缺少DependentUpon行-这就是为什么代码和设计器文件在项目中是分开显示的,而不是连接在一起的原因:
如果您加入遗漏的行,表单会在设计模式中正确显示:
并对资源文件进行整理:
为了解决这个问题,您可以在编辑器中编辑csproj,或者在Visual Studio中编辑:
1.备份文件
1.右键单击项目并选择“卸载项目”
1.右键单击已卸载的项目,然后选择“编辑[ProjectName].csproj”
1.进行更改,然后关闭文件。
1.右键单击已卸载的项目,然后选择“重新加载项目”
wwodge7n2#
我通过删除与该表单关联的所有文件解决了该问题
并手动将文件添加回项目
nnsrf1az3#
对于那些四处寻找却找不到安慰的人,我有另一个解决方案。我继承的项目代码质量很糟糕,前一个开发人员在代码中混合了大小写,因为“它不区分大小写,所以没关系”。
因此,尽管
PopulateRevs
实际上与Visual Basic中的POpulateREvs
相同,但这种惰性会导致问题。即:我在
.vbproj
文件中偶然看到了这个问题,同时查看了其他不起作用的解决方案。我偶然将Partmaster.Designer.Vb
改为Partmaster.Designer.vb
(小写扩展名),它起作用了。因此,作为另一种解决方案,虽然Visual Basic不区分大小写,但看起来
.vbproj
文件是区分大小写的。如果您感到困惑,另一件要确保的事情是您的文件名和.proj
文件共享相同的大小写。(我知道这是标记为
C#
的,但我在C#中测试了它,大小写混合也会导致问题。)bvk5enib4#
另一种可能性。我有一组表单都是从一个基本表单传下来的。我添加了位置保存/恢复代码--结果一切都是空白的。
经过一个小时的折腾,没有发现任何错误,它突然开始在设计器中抛出一个空引用异常,而不仅仅是空白。
为什么它对此保持沉默,然后突然开始嘎嘎叫,我不知道。
u59ebvdq5#
另一种可能性:我有一个Form超类,我的所有窗体都是从它派生的。(部分)类定义。这似乎混淆了Visual Studio,它显示的是我的超类的内容(例如,一个空表单),而不是对应于该文件的表单的内容。解决方案是将超类的定义移到一个不是表单设计器文件的不同文件中。
nuypyhwy6#
另一种可能:设计器似乎试图设计.h文件中的第一个类,不管它的名字是什么。我只是在实际的窗体类之前有一个空的forward ref类声明,它试图使用它。
zu0ti5jz7#
如果启动窗体为空并且没有编译器错误。请检查Program.cs文件是否正在运行正确的窗体,否则它将运行一个没有上下文的窗体,并显示为空。
在这种情况下,Program.cs文件应类似于:
请注意应用程序.运行(newStartForm());需要正确指定。
rpppsulh8#
下面是一个对我有效的解决方案:在问题发生之前,我将构造函数中InitializeComponent()的名称更改为Initialize()。将其改回InitializeComponent()后,问题得到了解决,表单再次可见。