[英]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.