我有类似的东西
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的解决方案。)
答案 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();