我有两个问题:
“哪个按钮调用了这个表单?” (简短版)
我无法触摸按钮或按钮的表单
我为什么要这个?
我有很多表单,需要知道用户如何到达那里。如果我可以获得表单(而不是按钮),它也可能会解决问题。
长版本:我需要将源表单/按钮的一些属性复制到新的,而无需手动进行,我打算稍后在异常报告中使用它来捕获更多信息
最初,我尝试执行“newForm.Caller = this;”每个按钮上都有 200 多个表单,每个表单上都有很多按钮。
所有表单及其按钮都是自定义控件,因此我可以在那里执行操作。
尝试过的东西
我尝试在表单构造函数中使用 StackFrames 和反射来做一些事情,但没有成功 ( 889310 )
我找到了这个 10401190对于JAVA却无能为力
我想我可以使用 OnClick 覆盖将最后一个按钮实例存储在按钮/表单类中的静态位置,然后在表单构造函数中获取它,但这似乎是最糟糕的解决方案。 (很多东西打开表单,罪魁祸首就是最后按下的按钮)
当其他东西打开 Forms 而我丢失了引用(DataGridVewButton、计时器、链接标签...)时,问题会变得更糟
编辑1:(oɔɯǝɹ) 另一个细节,可以从外部插件调用表单。所以我再次无法访问代码来更改它。
EDIT2:示例(Graham Bass,ShreyasKapur) FormA 有一个 ButtonA,单击时显示 FormB FormA 继承 FormBase Button 继承 ButtonBase FormB继承FormBase
我不能更改 FormA 和 ButtonA 代码,只能更改 FormBase 和 ButtonBase 代码
编辑 3:(布拉德利乌夫纳) ShowDialog() 窗体具有解决部分问题的 Owner 属性。谢谢布拉德利,我忘记了! 不幸的是,所有现有代码都使用无参数构造函数。 “将此表单显示为没有所有者窗口的模态对话框”( 1 )
最佳答案
我认为您正在尝试解决错误的问题。
当您的表单如此相互关联时,您就将它们紧密耦合在一起。通过回顾谁给你打电话,将它们更紧密地结合在一起,你只会让你的问题变得更糟。另请参阅:comefrom说明。
我建议在您的表单之间传递参数以向它们提供所需的数据。但是请将参数的数量保持在绝对最小值,并且不要尝试使用像 caller
这样的东西,那会是作弊。
关于c# - 哪个按钮调用了这个表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32700578/