2016-05-17 2 views
2

ToolStripMenuItem и базовый тип Control оба содержат имущество Enabled.Общая база для ToolStripMenuItem и управления?

Мне нужно передать оба типа функции, например EnableItems(multipleItems);, но я не могу найти общую базу, содержащую свойство Enabled.

Label или LinkLabel унаследовать от Control (которые обычно являются типами, которые я хочу переключить с «не включен» на «включено»).

Есть ли способ сделать это из-за особенностей коробки в C#?

+0

Если ваша среда исполнения не поддерживает динамический, это синтаксический сахар для отражения См. Этот вопрос, как установить свойство по имени (или получить исключение :-)), используя отражение http://stackoverflow.com/questions/619767/комплект-объект-свойство-с помощью отражения – vitalygolub

ответ

2

Используйте динамический тип. Это позволяет вам заставить компилятор доверять вам. Это может привести к чрезмерным исключениям во время выполнения, если вы неправильно их используете, но если вы осторожны, проблем нет.

public static void Enable(List<object> ctrs, bool enable) 
    { 
     foreach (var ctr in ctrs) 
     { 
      dynamic a=ctr; 
      a.Enabled = enable; 
     } 
    } 

Передайте ему список с тем, что вы хотите включить или удалить. Если есть нет разрешения на недвижимость будет врезаться во время выполнения, так что будьте осторожны

1

Если вы не хотите использовать динамический тип тогда как Control и ToolStripMenuItem наследуют от базового класса System.ComponentModel.Component. Таким образом, вы могли бы использовать это в качестве типа списка:

public void EnableItems(IList<Component> cpnts) 
{ 
    foreach (Component cpnt in cpnts) 
    { 
     ToolStripItem tsItem = cpnt as ToolStripItem; 
     if (tsItem != null) { tsItem.Enabled = true; break; } 

     Control ctrl = cpnt as Control; 
     if (ctrl != null) { ctrl.Enabled = true; break; } 
    } 
} 

Теперь вы можете выбрать, если вы хотите, чтобы цикл Еогеаспа к сбою во время выполнения (путем добавления броска исключения для неожиданного типа), или вы можете игнорировать неожиданные типы.