List <class public =“” struct =“”>未传递给用户的事件

时间:2019-05-02 13:48:40

标签: c# events struct parameters

这个问题已经有一段时间了,虽然它有一些看法,但是没有答案。这是不寻常的,因为我从SO社区中得到了非常好的回应。因此,如果有人可以就问题本身给我一些反馈,我将不胜感激。太长了吗?难以理解?简单来说,我只是一个缺少东西的白痴?任何反馈都将受到欢迎!转到原始问题...

我正在为内部程序员创建用户控件。控件之一是DataGridView的变体“ OurToolboxList”。必须提供的服务之一是能够在单元级别指示哪些数据是错误的。为此,由于消费者似乎更容易消化,我通过提供“事件”-“ SetValidity / OnSetValidity”来连接此功能。

//User will pass a list of position items telling us which elements in the grid are bad.
//The row is an integer, but the column is the name of the column. This makes it not dependent on column order.
public struct ElementPosition
{
    public int row;
    public String column_name;
}

private List<ElementPosition> BadElements = new List<ElementPosition>();

public delegate void SetValidity( List<ElementPosition> p_be );
public event SetValidity OnSetValidity;

这样,用户只需要引用我的控件(这样他们就可以访问该控件及其“ ElementPosition”结构),将我的用户控件放到其窗体上,然后双击OnSetValidity事件。我的控件创建并清除列表,然后在需要时引发事件:

// GetInvalids :  SetValidity / OnSetValidity
//Called when we get a new record set so we can ask which fields are good and which ones are bad.
private void GetInvalids()
{
    if (OnSetValidity != null)
    {
        //Remove any prior "bad element" results.
        BadElements.Clear();
        //Call user's function to get list of bad cells.
        OnSetValidity(BadElements);
    }
}

在这一点上,我希望事件函数在它们的代码中显示为

private void OurToolboxList1_OnSetValidity(List<ElementPosition> p_be)
{
}

或可能

private void OurToolboxList1_OnSetValidity(List<OurToolbox.OurToolboxList.ElementPosition> p_be)
{
}

但是我得到的是:

private void OurToolboxList1_OnSetValidity(List<T> p_be)
{
}

它甚至不会编译,因为...

The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)

No overload for 'OurToolboxList1_OnSetValidity' matches delegate 'NCFLSToolboxList.SetValidity'

所有这些都可以理解为错误,但是我不想要泛型,也不想替代/重载,我想要的是ElementPosition作为List类型。例如。像

private void OurToolboxList1_OnSetValidity(List<OurToolbox.OurToolboxList.ElementPosition> p_be)
上面

当我手动将“ T”更改为“ OurToolbox.OurToolboxList.ElementPosition”(正确的结构/列表类型)时,一切都很好-但我不希望用户每次都必须这样做... < / p>

关于发生了什么的任何想法?我应该进行哪些更改以使“ OurToolbox.OurToolboxList.ElementPosition”出现在用户面前,或者更改控件以使用常规属性-哪一个最好?我愿意改变自己的方法。这是到目前为止我想出的最好的结果。

谢谢

0 个答案:

没有答案