【问题标题】:How to access or control a panel to a different form vb.net [duplicate]如何以不同的形式访问或控制面板 vb.net [重复]
【发布时间】: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:我看到你指着我的答案:-)。虽然你有更复杂的方法,但你需要考虑你在做什么。它是一种月球飞行器,它是一个适用于成千上万不同用户的应用程序,还是一个适用于公司内部给定环境的应用程序?在后一种情况下,您通常有一个小时或几个小时的时间来完成它,或者它不会完成。在这种情况下,简单的解决方案是关键。它是完全面向对象的——对象被创建和实例化。可能的问题只是理论上的问题,因为您在封闭环境中将其用作独立应用程序。实际上,我从未听说过或遇到过任何问题。

标签: vb.net winforms


【解决方案1】:

您可以公开公共属性或变量,并使用它来定义“链接”表单的实例。

如果你有Parent-Child 关系(简化为相关行!):

Form2代码:

Public ParentFrm as Form1    ' in the header of the class Form2

Form1 代码,您在其中创建 Form2(只运行一次):

Dim Frm2 as Form2
Frm2.ParentFrm = Me
Frm2.Show()

Form1 内部使用Form2 中的Panel

ParentFrm.Panel1.Visible = False

您可以通过这种方式访问​​任何 GUI 对象以及公共属性和变量。

如果你有兄弟关系,你也可以这样做,但是通过共同的父表单。

表单之间的通信有更多方法,但这是最简单的一种,即使在复杂的表单中也能完美运行。与此相反,您有 MDI 之类的选项。

【讨论】:

  • 确保将控件设为公开。默认情况下它们不会。该物业是Modifiers。见this answer
  • @jimi 上面关于公共控制的评论以及您 (@djv) 提到的,抚摸我,因为我在过去十年中做了数千次,从未遇到过这样的问题。当您如上所述定义表单时,它会起作用。我对细节很感兴趣,但其实不是......
  • 我查看了链接和一些帖子,我认为从另一个类访问表单控制的场景是不同的场景。在这种情况下,它可以在 Modifiers 不设置为 Public 的情况下工作,因为表单是通过本地对象继承的。不确定我的措辞是否正确,但这种方式绝对可以正常工作。
  • 如果修饰符是朋友,当两个表单在同一个程序集中时它会起作用。这不适用于跨项目 - 为此您需要将其设为 Public。
  • 这个问题永远不会出现。你应该有持有你的逻辑和状态的对象。当对象以某种方式被修改时,它会引发一个 Form1 订阅的事件,并且 Form1 可以使自己的面板可见或不可见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 2013-01-07
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多