这个问题已经有一段时间了,虽然它有一些看法,但是没有答案。这是不寻常的,因为我从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”出现在用户面前,或者更改控件以使用常规属性-哪一个最好?我愿意改变自己的方法。这是到目前为止我想出的最好的结果。
谢谢