自定义组件单击事件

时间:2011-05-05 21:46:56

标签: c# .net winforms

我已经构建了一个自定义组件,其中基本上有一个图片框和标签。在父表单中,我希望能够检测到何时单击它。标准的.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!");
}

此代码永远不会触发。我是否需要在组件中添加任何内容,或者我只是做错了?

干杯

2 个答案:

答案 0 :(得分:3)

对,我终于解决了。 Tejs的回应让我更加困惑,所以这就是我所做的。

在我的UserControl中,我有以下事件:

public event EventHandler Clicked;

然后我有一个事件,当时点击了图像(仍在UserControl中),我刚刚调用了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 :(得分:2)

您可以通过展示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);

然后,只要在您的自定义控件上引发事件,就会通知父级,因为它订阅了该事件。