【问题标题】:C# WinForms, what is this strange error?C# WinForms,这是什么奇怪的错误?
【发布时间】:2011-06-12 07:27:43
【问题描述】:

我是 C# WinForms 的新手。我创建了一个继承 Form 类的类(EnhancedForm)。在 EnhanceForm 中,我放置了一些我想在所有表单中使用的常用函数(如验证、常用对象,如 DataTable 和字符串变量等,这样我就不必在表单中一次又一次地编写相同的代码),以及接下来我的所有表单继承了这个 (EnhancedForm)。

在 DAL(一个单独的类库)中,我有一个 CommonDB 类,它具有与 DB 相关的常用功能。对于数据库通信,我制作了所有形式的 CommonDB 对象。我想把 CommonDB 放在 EnhancedForm 中,这样我就不必在所有类中都创建它的对象了。

这里发生了一些我无法理解的事情。应用程序运行良好。但是,如果我尝试在设计视图中打开表单,则会出现错误。 “对象引用未设置为对象的实例。” 我无法在设计模式下查看表单。如果我从 EnhancedForm 中删除 CommonDb 对象并将其放入单独的表单中,它可以正常工作并允许查看表单。

如果我编译并运行,则不会出现此错误。请在这方面指导和帮助我。

谢谢

【问题讨论】:

    标签: c# .net winforms .net-3.5


    【解决方案1】:

    EnhancedForm 中有假定 CommonDb 对象的代码。在运行时您创建它(可能在 Form_Loaded 中),但在设计时它不存在。

    最好,所有访问 CommonDb 的代码都应该检查 null 和/或 this.DesignMode

    【讨论】:

    • 我不知道 VS/.NET 的最新版本(我们仍在 2005 年工作),但是 DesignMode 属性过去,嗯,根本不起作用。希望他们已经修好了。
    • 感谢 Henk 的指导,但奇怪的是所有表格都会发生这种情况。假设我在 form1 中使用了 CommonDB 对象,但所有表单的设计视图都因此而消失了。第二件事是,在 EnhancedForm 中,如果用户按下退出键,我已经完成了关闭表单的功能。如果我开始使用 Commondb,这个功能就会停止工作。我没有找到我错的地方。
    • 即使在表单加载时,我也重新实例化了 Commondb,但问题仍然存在。在调用它之前,即使我输入了 if 不等于 null 但结果是相同的。请指教。
    • 除非您展示创建 CommonDb 的方式/位置、使用方式等,否则我们将无法提供帮助。列出所有构造函数。 Esc 键是一个单独的问题。再次提供代码。
    • @hansi,调试一下你的 InitializeLayout 方法不行吗?
    【解决方案2】:

    您似乎是在基本表单的构造函数中启动 CommonDB 类。 Visual Studio 使用反射在设计视图中显示表单,这会导致调用表单的构造函数。您可以尝试仅重建项目以查看是否可以在设计视图中看到表单,但我认为它不会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2011-05-21
      • 1970-01-01
      • 2010-09-09
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多