由控件触发但传递到所有者列表<>的事件
本文关键字:列表 所有者 事件 控件 | 更新日期: 2023-09-27 18:35:31
我想了解如何将从类引发的事件转发到实现 List 的所有者类<>该类包含引发事件的类。 主类称为 PCCControls
,包含List<ControlBox>
对象。每个ControlBox
都实现一个名为 ButtonPushed
的事件。
我想通过在 PCCControls
类中实现类似于以下内容的事件,将事件从 ControlBox
类移动到 PCCControls
类
public delegate ControlBoxButtonPushedHandler(object sender, ControlBox controlbox);
public event ControlBoxButtonPushedHandler ButtonPushed;
我有以下几点:
public class PCCControls
{
List<ControlBox> ControlBoxes;
}
public class ControlBox
{
public event ButtonPushed;
public ProcessSub()
{
if(ButtonPushed != null) ButtonPushed(this, new EventArgs());
}
}
因此,根据上面的代码,我想将事件ButtonPushed
从 ControlBox
类移动到 PCCControls
类,并将触发事件的ControlBox
作为参数传递给 ButtonPushed
事件。
这如何实现? 您的支持将不胜感激
目前还不清楚你在问什么; 但是,我会试一试。 您可以简单地让PCCControls
类订阅ControlBox
中的事件:
public class PCCControls
{
List<ControlBox> ControlBoxes;
// initialization of ControlBoxes done elsewhere...
public voice SomeMethod()
{
ControlBoxes.ElementAt(0).ButtonPushed += controlBox_ButtonPushed;
}
public void controlBox_ButtonPushed(object sender, EventArgs e)
{
// TODO:
}
}
如果这不是您想要的,请提供更多详细信息。
如果确保实际列表对 PCCControls 类保持私有(因此客户端代码不能直接向其添加/删除 ControlBox),则可以在添加或删除项时订阅/取消订阅 ControlBox 的 ButtonPush 事件,然后定义自己的事件以将其转发到客户端代码。像这样:
public class PCCControls
{
public event EventHandler<PCCButtonPushedEventArgs> PCCButtonPushed;
List<ControlBox> ControlBoxes;
public void AddControlBox(ControlBox box)
{
box.ButtonPushed += OnButtonPushed;
ControlBoxes.Add(box);
}
public void RemoveControlBox(ControlBox box)
{
box.ButtonPushed -= OnButtonPushed;
ControlBoxes.Remove(box);
}
private void OnButtonPushed(object sender, EventArgs e)
{
var handler = PCCButtonPushed;
if (handler != null)
{
var box = (ControlBox)sender;
handler(this, new PCCButtonPushedEventArgs(box));
}
}
}
public class ControlBox
{
public event ButtonPushed;
public ProcessSub()
{
if(ButtonPushed != null) ButtonPushed(this, new EventArgs());
}
}