簡體   English   中英

c#如何在用戶控件中捕獲Windows窗體事件?

[英]c# How do I catch Windows Form Events in user control?

我已經做了搜索的用戶控件。 在搜索時會彈出一個窗口。 現在,我想從用戶控件訪問Form_ResizeForm_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM