【发布时间】:2014-07-01 18:22:21
【问题描述】:
我的表单带有一个菜单栏和下方的空间来显示我的控件。我的菜单栏中的一个按钮假设是一个打印按钮,它打印当前在我在表单中显示的用户控件中的图形。如果图表在打印按钮的事件处理程序中的表单上,我可以简单地调用
graph.printing.print(true)
这在我的情况下不起作用,因为图表在控件而不是表单中。
如何从包含的表单与用户控件通信并在需要时访问或传递其变量?我在表单底部还有一个状态栏,它也需要从用户控件中更新,但如果我只获得这一部分的帮助,我将能够处理这个问题。请记住,我还有另一个用户控件,我要添加到表单中,它还将包含一个图表,当按下打印按钮时,该图表需要与第一个控件上的另一个图表相同的处理。我计划将这两个换掉,这样我就有一个表单一次显示一个控件。
我从这个答案中得到了这个想法:https://stackoverflow.com/a/18191630/2567273,但经过进一步研究,我找不到任何人询问表单与其包含的控件之间的实际通信过程。
我认为this answer 与我正在寻找的内容很接近,但我认为它让我走上了使用面板而不是用户控件的道路。
输入此内容后,我注意到与我的问题最接近的答案可能是this,但该问题有孩子抚养事件,而父母在我让父母提出事件时做出回应,而父母必须从孩子那里获取信息.
【问题讨论】:
-
UC 需要的任何表单都应该通过属性或方法提供。当用户单击打印时,表单从控件中获取这个和那个并打印它或因为它显然是由用户控件管理的数据,只需在表单调用的 UC 上公开一个 PrintGraph 方法跨度>
-
那么如果你有另一个 UC,它也有一个你可以打印的图表,你只需要使用相同的方法或属性来实现它。对吗?
-
是的 - 您拥有这些用户控件是有原因的:(理论上)它们是作为管理和显示 foobars 的专家而构建的。打印只是相关操作之一。卸载到表单可以工作,但是可能有很多东西要传回以供其他东西打印/处理/保存/上传......由于表单是菜单的宿主,他的角色可以像获取一样少命令并将其传递给相关的参与者。仅仅因为表单确实有菜单并不是打印的好理由。
-
这也将使 UC 更加模块化,因为如果我制作它,它不会给出任何东西,所以只有我的 UC 执行相关操作,如打印或其他我必须做的事情。如果你把你的评论变成了答案,我会标记它。