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

VB.net:是否可以引用表单类之外的表单元素?,vb.net,forms,Vb.net,Forms,我目前正在编写我的第一个非平凡的VB.net程序(因此我来自一个相对无知的位置)。该程序从数据库中获取数据(根据用户输入字段),并根据该数据绘制各种绘图 我决定以最直观的方式将代码分解成类/文件。UI方法在form类中(基本上所有响应各种控件中用户输入的事件处理程序),DB stuff在其自己的类和文件中,用于在表单上绘制绘图的方法也在其自己的类/文件中划分 我面临的问题是DB类引用form类的各种元素。例如,其中一个DB方法用于填充form类中的combobox。但它显然不能这样做,因为它没有

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

我决定以最直观的方式将代码分解成类/文件。UI方法在form类中(基本上所有响应各种控件中用户输入的事件处理程序),DB stuff在其自己的类和文件中,用于在表单上绘制绘图的方法也在其自己的类/文件中划分

我面临的问题是DB类引用form类的各种元素。例如,其中一个DB方法用于填充form类中的combobox。但它显然不能这样做,因为它没有访问权限

因此,我的问题如下:

  • 我是否可以在表单类之外访问表单控件

  • 如果是,这是否一种良好的做法

  • 或者,让单独的共享变量“隐藏”我需要访问的字段,并将任何修改字段内容的方法(例如,将项添加到组合框)限制在表单类本身,这样会更好吗


提前感谢。

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


最好让窗体启动一个事件处理程序,然后调用DB类来获取所需的数据,然后在窗体类中调用另一个方法来绘制绘图。在我看来,如果这些方法所做的唯一事情就是在表单上绘图,那么就没有理由将它们抽象到其他类。

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


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

虽然您可以传递一个可从其他对象访问的控件对象,一般来说,你不必这么做,我个人认为这是一种不寻常的做法,除非有一个令人信服的理由。在你的问题中,你可以选择1和3。您希望尽一切可能将数据从GUI中分离出来。如果您的应用程序由不同技能的人员组成,并且/或者您希望扩展/重用应用程序组件和/或者您希望简化维护,则这一点尤其正确

您需要了解以下概念:

  • 层和层(UI/DAL/BLL/DB等)-参见:

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

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

在您简要地阅读了上述内容之后,我假设您将看到应该在UI代码库中保留GUI内容

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


有大量的参考文献讨论上述概念。尝试从GEGO中尽可能正确地获得体系结构是非常重要的。

< P>虽然你可以从其他对象中访问一个控制对象,但一般来说,你不必这么做,除非有一个令人信服的理由,否则我个人认为这是一种不寻常的做法。在你的问题中,选项1和3是这样的。您希望尽一切可能将数据从GUI中分离出来。如果您的应用程序由不同技能的人员组成,并且/或者您希望扩展/重用应用程序组件和/或者您希望简化维护,则这一点尤其正确

您需要了解以下概念:

  • 层和层(UI/DAL/BLL/DB等)-参见:

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

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

在您简要地阅读了上述内容之后,我假设您将看到应该在UI代码库中保留GUI内容

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

有大量的参考文献讨论上述概念。从一开始就尝试使您的体系结构尽可能正确是非常重要的

例如,其中一个DB方法用于填充form类中的combobox

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

例如,其中一个DB方法用于填充form类中的combobox

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

a)是b)否c)或创建其他参与者调用的方法,以允许所属表单对控件/显示等执行操作。d)将表单保留为用户输入沙箱,并定位大多数应用程序