Controls.Add (интерфейс) - PullRequest
       10

Controls.Add (интерфейс)

1 голос
/ 26 февраля 2010

У меня есть интерфейс, который реализован в 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);

Так что мой вопрос в том, какой интерфейс должен реализовывать мой интерфейс, чтобы иметь возможность добавлять его в элементы управления? Итак, моя стрелка будет:

public interface IArrow:InterfaceToAddToControls {...}

(это краткое изложение, а не полный код, как вы можете себе представить)

1 Ответ

2 голосов
/ 26 февраля 2010

Аргумент метода Control.ControlCollection.Add () должен иметь тип 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...