Visual Studio表单设计器

6
我有一个很烦人的问题。有时候在解决方案资源管理器中,Visual Studio不会显示某些窗体的“查看设计器”选项。它不会显示设计模式错误,只是没有显示使用设计器的选项。我无法确定发生这种情况的确切情况。是否有人对解决方案资源管理器出现这种行为的原因有一些想法?

你使用的是哪个版本的VS?如果是VS 2005,请确保你正在运行最新的SP。 - user195488
你设计的表单中有任何一个使用了可视化继承吗?如果你打开代码编辑器并按下F7键会发生什么? - Rory
1
这仅适用于 Visual Studio 认为是表单的表单。 - ironic
@SLaks:是的,就是那个。我几乎从不使用热键返回到设计视图。 - Rory
7个回答

5

如果源文件中的第一个类不是您表单的“部分类”,则会发生这种情况。在这种情况下,解决方案资源管理器中的文件类型图标最初将显示为表单,但在加载文件后,VS将将其更改为“C#”代码图标,并从弹出菜单中删除“查看设计器”选项。至少在VS2015中,可以通过注释掉有问题的代码并保存文件来修复此问题,此时VS将恢复预期的表单图标。


这绝对是我的问题。好判断。 - Jacob Robbins

4

我也遇到过这个问题,我修改了.csproj文件以解决它。在我的.csproj文件中,我修改了以下代码行:

<Compile Include="FormName.cs" />

使用以下代码:

<Compile Include="FormName.cs">
    <SubType>Form</SubType>
</Compile>

3
你的表单可能继承了一个自定义表单类。
有时,如果解决方案无法构建,VS可能会意识不到自定义类继承了Form
尝试重新构建解决方案。
如果需要更精确的答案,请提供更多细节。

是的,这似乎是个问题。将基本类型更改为“Form”,然后再更改回“MyCustomDialog”可以解决问题,但是否有一种方法让VS分析我的窗体是否为窗体? - ironic
更奇怪的是,MyCustomDialog位于一个库中,而这个库在很长一段时间内构建过程中都没有出现失败。 - ironic
1
尝试清理并重新构建解决方案,当我遇到这个问题时,它总是能够解决。 - Rory
没有成功。目前最简单的解决方案是将表单的基础类型更改为Form,然后再改回来。 - ironic
2
最终找到了确切的原因。我们的项目使用Source Safe进行管理,因此通常所有文件都是只读的。当Visual Studio(VS)编译项目时,它会以某种方式分析哪些文件表示表单,因此应该使用Forms Designer打开。为了让VS自己知道这一点,在.csproj文件中添加一些标记。但是,如果.csproj文件是只读的(就像在我的情况下一样),则VS无法修改它,并且解决方案浏览器仍然不知道它是一个表单。解决方案是将.csproj文件设置为非只读,并重新构建整个项目。 - ironic

1

我曾经在VS 2003中经常遇到这个问题。每次发生这种情况,我都会在记事本中打开.csproj文件,并将该类的“类型”更改回“Form”。


0
我曾经遇到过这个问题,并找到了解决方法。不知何故,我的.csproj文件损坏了,在XML中缺少了一个子键。比如说,如果我有一个名为MyControl.cs的UserControl,在我的损坏的.csproj中的XML看起来就像是:
<Compile Include="MyControl.cs" />

我已经修复了它,现在它应该是这样的:

<Compile Include="MyControl.cs">
   <SubKey>UserControl</SubKey>
</Compile>

MyControl.cs 读起来像这样(这只是为了完整性):

public partial class MyControl : UserControl
{
}

在进行了这个更改并保存后,Visual Studios 现在可以正确读取我的控件并加载设计器。我不知道这个文件是如何损坏的。


0

曾经遇到过Visual Studio 2017的同样问题。

我找到了以下解决方案:

  1. (根本原因):在form1.cs文件的顶部添加自定义类
  2. (症状):设计视图现在丢失了(在解决方案资源管理器中右键单击表单类,“查看设计器”未显示)
  3. (解决方案):将Form类移回文件顶部。 "查看设计器"现在正常显示

按照user2205930建议的方法进行操作可能会使您保持自定义类位于表单顶部。


0
如果您在文件中有多个类(真是太糟糕了),请确保Form类是文件中的第一个类。(不要问我怎么知道的。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接