【发布时间】:2020-02-29 19:56:14
【问题描述】:
是否有任何方法可以以不同的形式访问或控制面板或任何类似的标签等?
例如:
表格1
panel.visible = true
Form2
Form1.panel.visible = false
【问题讨论】:
-
How to access a form control for another form? 的可能副本(以及其他六个)
-
您可以毫无困难地实现这一点,方法是将控件公开为
public,或者您可以使用属性来访问它。 然而,以其他形式访问控件通常被认为是不好的做法。在表单之间共享信息的方式要优雅得多 -
表单是类。当您需要设置类对象的内部值时,您需要公开允许其他类更改这些值的公共属性或方法(如果需要,可重写)。以 托管 方式(它是公开实际执行更改的公共属性/方法的类)。尽量避免直接暴露内部对象(例如控件),将它们的访问修饰符设置为
public(坏事发生并且您没有唯一的入口点 - 公共属性/方法- 验证发生了什么)。 -
你不会得到很多关于这个问题的答案,因为简单的解决方案(目前下面唯一的答案)是反 OOP 并且使用 OOP 的解决方案过于复杂,因为它应该使用非 UI 类来包含您的逻辑和状态,并使用属性/方法和事件。是的,很好,表单可以相互引用,并且 OP 可以像 1991 年一样继续对 VB 进行编码。但是,如果允许它存在于尝试 OOP 的更大规模的解决方案中,那么这个解决方案最终会导致比它解决的问题更多的问题。但这也是无数问题的欺骗,所以投票结束。
-
@djv:我看到你指着我的答案:-)。虽然你有更复杂的方法,但你需要考虑你在做什么。它是一种月球飞行器,它是一个适用于成千上万不同用户的应用程序,还是一个适用于公司内部给定环境的应用程序?在后一种情况下,您通常有一个小时或几个小时的时间来完成它,或者它不会完成。在这种情况下,简单的解决方案是关键。它是完全面向对象的——对象被创建和实例化。可能的问题只是理论上的问题,因为您在封闭环境中将其用作独立应用程序。实际上,我从未听说过或遇到过任何问题。