VB.net:是否可以引用表单类之外的表单元素?

VB.net: is it possible to refer to form elements outside of the form class?

我目前正在编写我的第一个重要的 VB.net 程序(所以我来自一个相对无知的位置)。该程序从数据库中获取数据(根据用户输入字段)并根据该数据绘制各种图。

我决定以我认为最直观的方式将我的代码分解为 classes/文件。 UI 方法采用 class 形式(基本上所有事件处理程序都响应各种控件中的用户输入),数据库内容在其自己的 class 和文件中,用于表格上的绘图同样在它们自己的 class / 文件中划分。

我面临的问题是数据库class 引用了class 形式的各种元素。例如,其中一种 DB 方法用于填充 class 形式的组合框。但它显然不能这样做,因为它没有访问权限。

那么,我的问题如下:

提前致谢。

您可以通过将访问修饰符更改为 Public 来使表单控件可访问。可能不是进入的最佳实践,但如果你愿意,你可以这样做。

你最好让你的表单触发一个事件处理程序,然后调用你的数据库 class 来获取你需要的数据,然后调用表单中的另一个方法 class 来绘制你的阴谋。在我看来,如果这些方法所做的唯一事情就是在表单上绘图,那么就没有理由将它们抽象为其他方法 class.

虽然您可以传递可从其他对象访问的控制对象,但您通常不必这样做,我个人认为这是一种不常见的做法,除非有令人信服的 reason.This 选择选项 1 和 3在你的问题中。您想以各种可能的方式努力将数据从 GUI 中分离出来。如果您的应用程序被分配给具有不同技能的团队 and/or 如果您想 scale/re-use 您的应用程序组件 and/or 您想要简化维护,则尤其如此。

您需要了解以下概念:

  • 图层和层级(UI/DAL/BLL/DB,等等)- 请参阅: Layered Applications

  • DTO(数据传输对象)- 这将回答数据如何在 layers/tiers 之间移动。 Dot Net 提供了许多允许您执行此操作的数据结构,例如,Generic Lists、DataTables、DataSets、ArrayLists、XML 等。请参阅: Pros and Cons of DTOs

  • 绑定概念 - 控件如何与数据结构关联。

在您简要了解上述内容后,我假设您会发现应该在 UI 代码库中保留 GUI 内容。

要具体回答您关于如何从数据库绑定组合框的问题,请参考Populate Combo from DB作为示例。

有很多参考资料讨论了上述概念。从一开始就尝试让您的架构尽可能正确是非常重要的。

For example, one of the DB methods is used to populate a combobox in the form class.

不要那样做。将您的数据库方法更改为 return 项目列表。然后让表单中的代码调用数据库中的方法并用结果填充组合框。