2011-05-05 132 views
1

我已經構建了一個基本上有一個圖片框和標籤的自定義組件。在父表單中,我希望能夠檢測到它被點擊的時間。標準的.click事件似乎沒有工作,但我從未使用過事件,所以我不確定我是否正確使用它們。繼承人我使用(父),試圖使其認識到點擊代碼:自定義組件點擊事件

Item aItem = new Item(); 
aItem.Icon = ItemImage; 
aItem.Title = Title; 
aItem.Click += new EventHandler(ItemClicked); 
aItem.Filename = File; 

和其繼承人調用方法:

public void ItemClicked(Object sender, EventArgs e) 
{ 
    MessageBox.Show("Item Clicked!"); 
} 

此代碼永遠不會觸發。我是否需要將任何東西放入組件中,或者我只是做錯了什麼?

乾杯

+0

關於mouseLeftButtonDown而不是點擊? – 2011-05-05 21:49:20

+0

您是否點擊了自定義控件中包含的控件? – 2011-05-05 22:30:32

+0

你是從哪個基礎班取得的? – seairth 2011-05-05 22:34:04

回答

2

對我終於搞定了。 Tejs的迴應讓我更加困惑,所以這就是我所做的。

在我的用戶,我有以下事件:

public event EventHandler Clicked;

然後,我被點擊時的圖像(靜止在用戶控件)的事件,我只是叫Clicked事件:

private void imgItem_Click(object sender, EventArgs e) 
{ 
    Clicked(this, e); 
} 

然後在我的父窗體,當我創建的對象,我有以下幾點:

Item aItem = new Item(); 
aItem.Clicked += new EventHandler(ItemClicked); 

void ItemClicked(object sender, EventArgs e) 
{ 
    MessageBox.Show("Clicked!"); 
} 
1

你會做到這一點通過暴露一個event「:

您的自定義組件:

// A custom delegate like MyItemClickedHandler, or you could make a Func<> or Action<> 
public event MyItemClickedHandler ItemClickedEvent; 

public void ItemClicked(object sender, EventArgs e) 
{ 
    if(ItemClickedEvent != null) 
     ItemClickedEvent(); // Your delegate could pass parameters if needed 
} 

,那麼父形式簡單地觀察事件:

myCustomControl.ItemClickedEvent += new MyItemClickedHandler(SomeMethod); 

然後,無論何時在您的自定義控件上引發事件, e父母因爲訂閱了該事件而被通知。