使用构造函数时检测调用表单?

时间:2013-12-07 17:04:49

标签: .net vb.net winforms reflection

我有类似的东西

public class something : Inherits NativeWindow

Private WithEvents form As Form

Public Sub New(ByVal form As Form)
    Me.form = form
End Sub

end class

用法是:

new something(Me)

我想知道是否可能在C#VBNET使用反射或其他东西来检测调用表单而不是将其作为参数传递,如下所示:

public class something : Inherits NativeWindow

Private WithEvents form As Form

Public Sub New()
    Me.form = (callingform) ' If I call this from Form1 Class then the expected result is that Form1.
End Sub

end class

所以用法应该是:

用法是:

new something()

这是因为我的类继承了NativeWindow,我需要将句柄分配给调用表单。

(我想避免继承Form而不是NativeWindow的解决方案。)

2 个答案:

答案 0 :(得分:2)

如果从活动表单调用代码,则可以获取活动表单。例如,如果从按钮单击调用它就是这种情况。

Me.form = Form.ActiveForm

答案 1 :(得分:1)

编辑:重要提示:此答案下方第一条评论中的链接表明,堆栈跟踪结果并不总是可靠地告诉您来自哪里(以及其他信息)。请仔细阅读并选择更适合您情况的方法。除了简单测试之外,我还没有使用过以下方法。

一种方法是在调用表单中使用以下代码。

//calling form
Form2 f2 = new Form2();

//called form
StackFrame frame = new StackFrame(1, true);
var callerFileName = frame.GetFileName();

来源为little wonders of getting caller's infomration