2012-08-09 100 views
0

我已經搜索了這個,並有幾個答案,但我無法弄清楚如何做到這一點。C#自定義控件的自定義事件WinForm

我有一個帶有文本框和列表視圖的自定義控件。 當用戶開始在文本框中輸入內容時,列表視圖會被填入所有可能匹配的文本(它是用戶的搜索框)。 用戶正在輸入客戶姓名以查找客戶。

我想要做的是,當用戶鍵入客戶並選擇了客戶時,我需要將客戶名稱從自定義控件的文本框傳遞到我的主項目。

爲此,我認爲,我需要一個自定義事件,當選擇一個客戶時,它會引發一個事件讓主應用程序知道。

我該如何做到這一點,在此先感謝。

回答

1

你需要做三件事。

1.定義您的自定義控件中的事件(現在,不添加特殊事件參數)。

public event EventHandler CustomerSelected { get; set; } 
private void OnCustomerSelected() { 
    var customerSelected = CustomerSelected; 
    if (customerSelected != null) { 
     customerSelected(this, EventArgs.Empty); 
    } 
} 

2.必要時開始活動。您可以通過在選擇客戶時調用OnCustomerSelected方法在自定義控件中執行此操作。

3.在主窗體中處理事件。你可以通過這樣的事情做到這一點(我使用了lambda,你也可以定義一個eventhandler方法,無論你喜歡什麼)。

this.customerControl1.CustomerSelected += (s,e) => { 
    // This runs when a customer is selected. 
}; 
+0

不應該'OnCustomerSelected'被'保護虛擬'嗎? (只是最佳做法) – 2012-08-09 08:59:20

+0

我通常會把它們留在私人空間,除非有其他必要。 – Maarten 2012-08-09 09:01:58

+0

如果您只爲自己/團隊開發,並且始終將代碼設置爲實時開發環境,則爲真。 – 2012-08-09 09:10:06