c# - 哪个按钮调用了这个表单?

标签 c# winforms system.reflection

我有两个问题:

  1. “哪个按钮调用了这个表单?” (简短版)

  2. 我无法触摸按钮或按钮的表单

我为什么要这个?

我有很多表单,需要知道用户如何到达那里。如果我可以获得表单(而不是按钮),它也可能会解决问题。

长版本:我需要将源表单/按钮的一些属性复制到新的,而无需手动进行,我打算稍后在异常报告中使用它来捕获更多信息

最初,我尝试执行“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/

相关文章:

c# - 不可变与可变 C#

c# - 从 WinForms 应用程序中删除 ClickOnce

c# - 创建实例并分配运行时程序集的属性

f# - ActivePattern 与 System.Type 匹配有什么问题?

c# - 想要在运行时在程序集内加载程序集?

c# - 在什么情况下有必要脱离事件?

c# - 如何翻译 ServiceStack 中的复杂对象?

c# - 找不到类型或命名空间名称 'OwinStartupAttribute'

c# - WebBrowser HtmlElement.GetAttribute ("href") 前置主机名

c# - .net 的 Windows.Forms.DataVisualization.Charting 程序集是否有替代方案?