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

时间:2015-01-07 21:49:31

标签: vb.net forms

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

我决定以我认为最直观的方式将代码分解为类/文件。 UI方法在表单类中(基本上所有事件处理程序都响应各种控件中的用户输入),DB的东西在它自己的类和文件中,用于在表单上绘制绘图的方法同样在它们自己的类中划分/ file。

我面临的问题是DB类引用了表单类的各种元素。例如,其中一个DB方法用于填充表单类中的组合框。但它显然无法做到这一点,因为它无法访问。

所以,我的问题如下:

  • 无论如何我可以在表单类之外访问表单控件吗?

  • 如果是的话,它会被认为是一种好习惯吗?

  • 或者我最好将单独的共享变量“遮蔽”我需要访问的字段并保持修改字段内容的任何方法(例如,将项目添加到组合框中)仅限于表单类本身?

提前致谢。

3 个答案:

答案 0 :(得分:2)

虽然您可以传递可从其他对象访问的控件对象,但您通常不必这样做,我个人认为这是一种不常见的做法,除非有令人信服的理由。这适用于您的问题中的选项1和3。您希望尽可能地将数据与GUI分开。如果您的应用程序分为具有不同技能的人员和/或您希望扩展/重用应用程序组件和/或您希望简化维护,则尤其如此。

您需要了解这些概念:

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

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

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

在您简要介绍上述内容之后,我假设您将看到您应该在UI代码库中保留GUI内容。

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

有很多参考文献讨论了上述概念。尝试从get get开始,尽可能使您的架构正确是非常重要的。

答案 1 :(得分:2)

  

例如,其中一个DB方法用于填充表单类中的组合框。

不要那样做。更改数据库方法只返回项目列表。然后让表单中的代码调用DB中的方法,并使用结果填充组合框。

答案 2 :(得分:1)

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

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