窗体控件消失了

11

我有一个Windows Forms项目,似乎在设计视图中丢失了所有控件。当我运行该项目时,控件会正常显示。只有此表单在Visual Studio的设计视图中出现问题,所有其他表单都没有问题。

我已经尝试重新打开解决方案和重新打开文件,但均无效。 我还尝试过清理和重建解决方案,但也没有用。 我制作了一个视频屏幕截图描述了这个问题。

接下来我该尝试什么?


4
你的表单可能在设计时抛出了一个异常,但这个异常被忽略了。请打开另一个 Visual Studio 实例,并使用 "工具" + "附加到进程" 将其附加到第一个实例上。然后在 "调试" 菜单下选择 "异常",勾选 "已抛出" 的框框,这样调试器在异常被抛出时就会停下来。 - Hans Passant
请查看https://dev59.com/dWYr5IYBdhLWcg3wXJAK#14558492线程。 - Mohammedsalim Shivani
我遇到了这个问题,解决方法在InitializeComponents方法中,由于某种原因,我在form1.cs和form1.designer.cs中使用了相同的方法名。 - undefined
8个回答

9

哇,太烦人了!这让我很抓狂,所以我浪费了45分钟尝试解决它,而不必重新添加控件,因为这将非常麻烦(而且在过去几周中,这已经是我在VS 2017中遇到的第3或第4次了)。

对我来说,解决方案是在设计文件中找到我的控件(通过“转到实现”)。然后我发现该控件的".Add"行竟然消失了?在我自己手动添加回去并保存后,它神奇地重新出现在我的Windows表单设计视图中。下面是截图供参考。

enter image description here

我的设置:

  • Windows 7 x64
  • Visual Studio 2017 Pro x64
  • Windows C# Forms项目
  • 缺少的控件(大多数时间)都在一个面板对象内

1
今天发生了这样的事情:所有控件都消失了。我按照你建议的做法解决了这个问题(Visual Studio 2013社区版)。 - Jack Griffin
1
我有一个类似的问题,但在我的情况下,只有控制按钮(最大化、最小化和关闭)在切换到另一种文化时消失。我尝试了这个解决方案,但我没有看到在设计者中添加这些控件的任何代码。 - Eda

2

我曾经遇到过类似的问题(唯一的区别是在调试模式下运行项目时,控件有时会显示出来,但之后它们也消失了)。

我不得不手动重新添加在 designer.cs 文件中丢失的代码。

我的 initializeComponent() 方法被简化为以下代码:

    private void InitializeComponent()
    {
        this.SuspendLayout();

        this.ResumeLayout(false);
        this.PerformLayout();
    }

我不得不逐个重新添加每个组件代码块,就像这一个 - listBox1:

private void InitializeComponent()
    {
        this.listBox1 = new System.Windows.Forms.ListBox();
        this.SuspendLayout();

        // 
        // listBox1
        // 
        this.listBox1.FormattingEnabled = true;
        this.listBox1.Location = new System.Drawing.Point(10, 10);
        this.listBox1.Name = "listBox1";
        this.listBox1.Size = new System.Drawing.Size(133, 43);
        this.listBox1.TabIndex = 5;

        // 
        // Form1
        // 
        this.ClientSize = new System.Drawing.Size(550, 430);
        this.Controls.Add(this.listBox1);

        this.Name = "Form1";
        this.Load += new System.EventHandler(this.Form1_Load);
        this.ResumeLayout(false);
        this.PerformLayout();

    }

当然,我不知道调色板坐标需要是什么。所以,在代码中我将x,y设为10,10。然后切换到设计视图。控件被放置在左上角。我使用设计器将它放回到Visual Studio毁掉我的晚上之前的位置。
确保在InitializeComponent()方法之后找到对您控件的引用:
    #endregion
    private System.Windows.Forms.ListBox listBox1;

另外一个提示:如果你不知道 designer.cs 类在寻找你特定控件的哪些属性,请从工具箱中创建一个新的控件,然后回到代码中查看 Visual Studio 为该控件类型自动生成了什么。

祝你好运,接下来的一个小时就请拜拜了 :)


2

看起来更像是在运行时调用了另一个表单。

你应该捕获代码以了解应用程序的行为(例如表单代码和 program.cs 代码)。


2
你可能正在寻找的是“工具箱”。
我曾经长时间迷失在寻找它的路上。只需简单地按下Ctrl+Alt+X,就可以将其带回。

谢谢。我在新项目中找不到它。 - JD Byrnes

1
也许你引用了在同一解决方案中定义但不同项目中的用户控件,所做的更改必须通过简单的 Solution/Rebuild All 解决。如果不是这样,那么可能是构建问题(混合 x86 和 x64 构建)。

1
在VS 2017中,如果您将yourForm.Designer.cs从解决方案中排除,然后再次添加它,应该可以解决问题。

4
我无法单独排除设计文件这一选项。 - Zorgarath
我自己尝试过了,甚至将其添加到源代码控制中,但是无法做到。我还尝试将设计文件移出项目文件夹并重新添加它...可惜没有起作用。不过这是个好主意。 - Christopher

0

检查并查看问题是否是由于 designer.cs 没有正确嵌套。它必须在 .cs 文件下面。如果不是,请右键单击并“从项目中排除”与表单相关的所有文件,然后将表单 (.cs) 重新添加到项目中。这将解决问题。


0
我在Windows 10 (20H2)上安装了Visual Studio 2019 (版本16.11.5),自从最近升级版本后,在WinForm项目中发现了一个bug。 我有一个WinForm项目(.NET 4.8目标),我添加了几个控件(按钮、标签和文本框),然后开始添加一些代码,当我回到Form1.Design选项卡时,所有的控件都消失了,所以我的解决方法是返回到Form1.cs选项卡,然后再返回到Form1.cs[Design]选项卡,这样所有的控件就神奇地重新出现了。 看起来在Visual Studio Design选项卡中缺少了一个刷新。

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