我目前有一个自定义控件,它不知何故失去了它的父级,现在没有任何东西的父级,但它仍然在表单设计器的控件列表中。删除按钮也不起作用,因此被禁用。这种情况时不时发生,并且通过设计器代码并手动删除是一件痛苦的事情,而且还有其他开发人员认为这会惹恼并可能使他们感到困惑。
因此,我试图在控件 ComponentDesigner 中添加一个 Verb 以从表单中删除自身。但我意识到,因为它不是任何东西的“孩子”,所以它不能像孩子一样被删除。因此,我将如何通过代码从表单设计器中删除控件?
我目前有一个自定义控件,它不知何故失去了它的父级,现在没有任何东西的父级,但它仍然在表单设计器的控件列表中。删除按钮也不起作用,因此被禁用。这种情况时不时发生,并且通过设计器代码并手动删除是一件痛苦的事情,而且还有其他开发人员认为这会惹恼并可能使他们感到困惑。
因此,我试图在控件 ComponentDesigner 中添加一个 Verb 以从表单中删除自身。但我意识到,因为它不是任何东西的“孩子”,所以它不能像孩子一样被删除。因此,我将如何通过代码从表单设计器中删除控件?
当您的某个控件在设计时引发异常时,可能会发生这种情况。这很少是无声的事件,设计师会显示一个弹出消息框。当您使用 try/catch 吞下代码中的异常时,可能不会出现消息框。
试图通过破解设计师来解决这个问题只会增加问题。通过编辑设计器代码来修复它,当您知道自己在做什么时就可以了。如果你找不到原因,那就把它弄到一个可以让它有点重现的地步。然后启动 Visual Studio 的另一个实例,Tools + Attach to Process 并选择第一个实例。调试 + 异常,勾选 CLR 异常的抛出框,以便调试器在抛出异常时停止。
备份文件。
打开设计器文件;例如,Form1.Designer.cs
展开这个区域: Windows Form Designer generated code
您应该能够在代码中找到您的控件并将其删除。当心。
我通过在“文档大纲”选项卡中找到松散的控件解决了这个问题。这种方式非常简单并且是图形化的。