[英]c# How do I catch Windows Form Events in user control?
我已经做了搜索的用户控件。 在搜索时会弹出一个窗口。 现在,我想从用户控件访问Form_Resize和Form_LocationChanged事件。
在控件构造函数中,您必须预订控件的ParentChanged
事件,才能知道何时可以获取控件的当前父级。
public YourControl()
{
InitializeComponent();
ParentChanged += OnParentchanged;
}
private void OnParentchanged(object sender, EventArgs e)
{
// maybe get Form istead of just parent control
Parent.Resize += OnParentResize;
Parent.LocationChanged += OnParentLocationChanged;
}
然后,您必须订阅所需的表单事件。 事实是,您的控件的Parent
可能是另一个控件,因此您可能要递归搜索所有Parents
直到它形成为止。 并不是很清楚您想要实现什么。
另外,请记住,如果前一个父级发生更改,您将取消订阅该事件。 但这是另一个非常棘手的问题。
编辑:
您不需要自己递归搜索表单,@ jmcilhinney提到了一个FindForm()
方法。
每个控件都有一个FindForm
方法,该方法将返回包含该控件的表单,即使层次结构之间也存在其他控件。 一旦引用了表单,就可以使用与其他对象在运行时完全相同的方式来处理其事件。
如果尝试从构造函数访问它,则Parent对象可能为null。 我要做的是在UserControl的Load事件中添加引用。
private void CustomControl_Load(object sender, EventArgs e)
{
ParentChanged += OnParentChanged;
}
private void OnParentChanged(object sender, EventArgs e)
{
Parent.Resize += OnParentResize;
Parent.LocationChanged += OnParentLocationChanged;
// More events or
// Do Something...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.