我已经构建了一个自定义组件,其中基本上有一个图片框和标签。在父表单中,我希望能够检测到何时单击它。标准的.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 :(得分: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);
然后,只要在您的自定义控件上引发事件,就会通知父级,因为它订阅了该事件。