当我更改自定义控件时,为什么表单会崩溃?

时间:2009-06-11 20:24:06

标签: vb.net visual-studio user-controls

我创建了一个自定义控件,它包含在VB Forms应用程序引用的控件库中。

当我修改控件并在VS窗口中打开应用程序时,VS通常会询问我是否要重新加载已更改的项目。

然而,有几次,它没有问我这个,当我打开包含修改后的控件的表单时,我得到一个错误窗口警告我,如果我忽略错误消息并继续,那么我风险使VS不稳定。我已经学会忽略此错误消息,继续,并立即将表单保存到新文件。

还有其他人有这个问题吗?这是VS中的错误吗?

5 个答案:

答案 0 :(得分:2)

您可能正在序列化您不想要的属性,并导致意外更改。查看设计器代码,看看设计师为您的控件创建了什么。

您可以将以下属性添加到属性以防止序列化:

导入System.ComponentModel

    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _

答案 1 :(得分:0)

它更可能是你控制中的错误。 VS表单设计器实际上会在设计器中创建一个控件实例,因此如果您的控件正在执行任何操作,例如伸出数据库,它将抛出异常并阻止表单正确呈现。

它实际上完全可以从另一个Visual Studio实例附加调试器,并在用户控件的代码行上放置断点 - 从那里,您可以缩小导致问题的代码行。

一旦找到导致问题的那一行,请用以下内容包装:

If Me.DesignMode Then
    Return
End If

在设计器中呈现控件时,DesignMode属性返回True,否则返回false。此属性不是100%可靠。如果在另一个控件中有控件,则子控件的DesignMode属性将为False。当你有多层嵌套控件时,痛苦的痛苦处理。

答案 2 :(得分:0)

问题不在于控件本身 - 在我退出VS后,重新加载项目(使用已删除的表单的新紧急保存副本),它可以正常工作。

所以,我认为编写的代码没有任何问题,因为只要我在修改控件时没有打开应用程序(在另一个库中),一切正常。

原因可能与表单中未保存的更改以及通过修改表单创建的更改有关吗?

答案 3 :(得分:0)

我也遇到过这个问题。避免它的最好方法是创建一个新版本的控件,例如SimpleKeyboard3,然后确保从表单中删除旧的,然后用新的替换它。否则,表单可能会引用属性或其他无法再引用的内容。

或者,您可以从表单中删除控件,然后修改控件,然后将其添加回工具栏,然后将其拖回到表单中。

即使它已被删除,您仍然可以通过选择“忽略并继续...这可能会使设计者不稳定”选项来修复它,以便您可以删除控件。

答案 4 :(得分:0)

问题似乎是对不再存在的控件的引用,有时因为控件所在的.dll htat不再可用。我在控制库上执行“全部清理”时发现了这一点,然后在我打开引用控件的表单时出现错误 - 当我在控件库中“重建所有”时出现问题。