.NET WinForms自定义控件:如何获取对包含表单的引用

时间:2010-09-23 22:50:33

标签: .net windows winforms custom-controls

在创建WinForms自定义控件/用户控件时,是否有办法在运行时获取控件所在的表单,以便访问该表单的各种属性?我宁愿不将对表单的引用传递给控件的构造函数,因为各种原因,我需要保留一个没有参数的默认构造函数。

一个例子:我有几个自定义控件封装了Win32 API调用,有些调用需要将Window句柄作为参数传递。我希望能够检索包含表单的句柄,以便将其传递给API函数。

另一个例子:我有一个自定义控件,提供“toast”式用户通知。我希望可以选择在相对于主申请表格位置的位置打开通知表格,例如在主窗口的中心,在右边等等。这显然是不可能的,如果不知道主应用程序窗口的坐标。

可以在某些情况下使用FindWindowEx() - 类型的API调用,但这感觉就像一个kludge,并不会在所有情况下都有效。

有人知道这是否可行?

3 个答案:

答案 0 :(得分:1)

您可以使用Control.TopLevelControl属性。

答案 1 :(得分:0)

你想要Control.Parent,它返回父控件。要获取表单,只需在所有父控件上调用parent,直到您点击System.Windows.Forms.Form

答案 2 :(得分:0)

尝试使用FindForm方法。请注意,如果在控件的构造函数中调用它,它将返回null

如果您可以等到OnParentChanged事件,FindForm将返回对父表单的引用。