设计器中包含事件的类列表

时间:2011-11-17 14:34:17

标签: c# events list propertygrid

我正在为控制器编写OPC通信包装器,我创建了一个如下组件;

public class OPCGroup : Component
{
    (snipped)

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public List<OPCItem> Items
    {
        get { return mItems; }
        set { mItems = value; }
    }

}

上面的“项目”列表中的每个项目都是这样的

public class OPCItem : MarshalByRefObject, IDisposable
{
    private String mName;

    private String mTag;

    private object mValue;

    public String Name
    {
        get { return mName; }
        set { mName = value; }
    }

    public String Tag
    {
        get { return mTag; }
        set { mTag = value; }
    }

    public object Value
    {
        get { return mValue; }
        set { Change(value, true); }
    }

    public event OPCItemEvent Changed;
}

现在问题是OPCItem的Changed事件在设计时间不可更改,我可以使用

在运行时向项添加事件
opcGroup1.Items[0].Changed += new OPCItemEvent(Item0Changed);

但是,我希望能够在设计时绑定事件,因为它更容易。

我尝试使用自定义UITypeEditor中的IEventBindingService手动创建事件,如下所示

        IEventBindingService eventBindingService = provider.GetService(typeof(IEventBindingService)) as IEventBindingService;


        EventDescriptorCollection edc = TypeDescriptor.GetEvents(Group.Items[0]);

        EventDescriptor Event = edc.Find("Changed", false);

        PropertyDescriptor pd = eventBindingService.GetEventProperty(Event);

        pd.SetValue(Group.Items[0], Group.Items[0].Name + "Changed");

但后来我收到了错误

  

无法在传递给事件绑定服务的对象上设置事件,因为无法找到与该对象关联的站点

然后我在OPCItem类中实现了IComponent接口以获取Site属性,但现在集合项显示在设计器上。

有关如何解决此问题的任何建议吗?

0 个答案:

没有答案