在创建WinForms自定义控件/用户控件时,是否有办法在运行时获取控件所在的表单,以便访问该表单的各种属性?我宁愿不将对表单的引用传递给控件的构造函数,因为各种原因,我需要保留一个没有参数的默认构造函数。
一个例子:我有几个自定义控件封装了Win32 API调用,有些调用需要将Window句柄作为参数传递。我希望能够检索包含表单的句柄,以便将其传递给API函数。
另一个例子:我有一个自定义控件,提供“toast”式用户通知。我希望可以选择在相对于主申请表格位置的位置打开通知表格,例如在主窗口的中心,在右边等等。这显然是不可能的,如果不知道主应用程序窗口的坐标。
我可以在某些情况下使用FindWindowEx() - 类型的API调用,但这感觉就像一个kludge,并不会在所有情况下都有效。
有人知道这是否可行?
答案 0 :(得分:1)
您可以使用Control.TopLevelControl
属性。
答案 1 :(得分:0)
你想要Control.Parent
,它返回父控件。要获取表单,只需在所有父控件上调用parent,直到您点击System.Windows.Forms.Form
。
答案 2 :(得分:0)
尝试使用FindForm方法。请注意,如果在控件的构造函数中调用它,它将返回null
。
如果您可以等到OnParentChanged
事件,FindForm
将返回对父表单的引用。