哪个Button称为此表单?

时间:2015-09-21 16:51:13

标签: c# winforms system.reflection

我有两个问题:

  1. “哪个按钮叫这个表格?” (简短版)

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

  3. 为什么我要这个?

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

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

    最初,我试图做一个“newForm.Caller = this;”在每个按钮上,但每个按钮上有200多种形式和许多按钮。

    所有表单和它的按钮都是自定义控件,所以我可以在那里做。

    尝试过的事情

    • 我尝试在表单构造函数中使用StackFrames和反射但不起作用(889310

    • 我发现这个10401190用于JAVA,但它无法帮助

    • 我以为我可以使用OnClick覆盖将最后一个按钮实例存储在buttons / forms类中的静态位置,然后在表单构造函数中获取它,但似乎是最糟糕的解决方案。 (许多事情是开放的形式,罪魁祸首将是按下的最后一个按钮)

    • 当其他东西打开时,问题变得更糟,我丢失了引用(DataGridVewButton,定时器,链接标签......)

    EDIT1:(oɔɯǝɹ) 可以从外部插件调用另一个细节,表单。所以我再次对代码进行更改无法改变它。

    EDIT2:示例(Graham Bass,ShreyasKapur) FormA有一个ButtonA,单击时显示FormB FormA继承FormBase Button继承了ButtonBase FormB继承FormBase

    我既不能改变FormA也不能改变ButtonA代码,只能改变FormBase和ButtonBase代码

    编辑3 :(布拉德利·乌弗纳) ShowDialog()表单具有Owner属性,可以解决部分问题。谢谢布拉德利,我忘记了! 不幸的是,所有现有代码都使用无参数构造函数。 “将此表单显示为没有所有者窗口的模式对话框”(1

1 个答案:

答案 0 :(得分:2)

我认为你正试图解决错误的问题。

当您的表单相互关联时,您将它们紧密地耦合在一起。通过回顾谁给你打电话来更紧密地联系它们,你只会让你的问题变得更糟。另请参阅:comefrom指令。

我建议在表单之间传递参数,以便为他们提供所需的数据。但是要将参数数量保持在绝对最小值,并且不要尝试使用像caller这样的作品,这样做会让人作弊。