Controls.Add被(接口)

时间:2010-02-26 08:55:50

标签: .net controls interface

我有一个在customcontrol中实现的接口:

public interface IArrow{...}
pulblic class Arrow1:UserControl, IArrow{....}
pulblic class Arrow2:UserControl, IArrow{....}

然后我的表格会显示箭头:

Arrow1 arr1=new Arrow1();
Arrow2 arr2=new Arrow1();
this.Controls.Add(arr1);
this.Controls.Add(arr2);

但我希望能够做到这一点:

IArrow arr1=new Arrow1();
IArrow arr2=new Arrow1();
this.Controls.Add(arr1);

问题是我需要强制转换为控件:

this.Controls.Add((Arrow1)arr1);

所以我的问题是我的界面必须实现什么接口才能添加到控件中? 所以我的IArrow会是:

public interface IArrow:InterfaceToAddToControls {...}

(这是一个摘要,而不是你能想象的完整代码)

1 个答案:

答案 0 :(得分:2)

Control.ControlCollection.Add()方法的参数必须是Control类型。那不是接口类型。您的控件已经从Control派生,不需要强制转换。你只需要一个单独的局部变量,无法解决这个问题:

  var ctl = new Arrow1();
  this.Controls.Add(ctl);
  IArrow arr1 = ctl;

或者是一个小帮手方法:

private IArrow AddArrow(Control ctl) {
  this.Controls.Add(ctl);
  return ctl as IArrow;
}
...
  IArrow arr1 = AddArrow(new Arrow1());