2015-09-11 4 views
0

Я не знаю, возможно ли это, и как это возможно. Я поясню хочу использовать это позже, что нравится:коллекция предметов, которые делают поля предметов в коллекции доступными

//setting a single item as known. 
label1.BackColor=Color.FromARGB(255,255,255); 
/*setting multiple items in something like a container (wanted, not yet possible)*/ 
sContainer.BackColor=Color.FromARGB(255,255,255); 
//and that's how it works recently with my class... 
sContainer.SetValues("BackColor",Color.FromARGB(255,255,255)); 

Контейнер будет использовать дженериков и Reflection я думаю. Класс контейнера должен «скопировать» все настраиваемые свойства T-класса (здесь Control) в себя. Поэтому, если я использую SetContainer<Control>, я могу установить все значения backcolor в моем контейнере на sContainer1.BackColor=....

Мой код пока не знают, что выглядит как:

public class SetContainer<T>:IList<T> 
{ 
/*I've implemented all methods of IList by using the elements-List*/ 
private List<T> elements; 
public void SetValues(string propname,object value) 
    { 
    FieldInfo f=typeof(T).GetField(propname); 
    elements.ForEach(x=>f.SetField(x,value); 
    } 
} 

Мне очень жаль, что я не знаю, как описать это хорошо понятно.

+0

Какой объект является sContainer? Вы заранее знаете потенциальные свойства? –

+0

sContainer недавно является экземпляром моего класса (второй фрагмент). Но в последнее время 'sContainer.BackColor' не используется (но я хочу использовать этот путь из-за более опечатки-безопасности ...). Недавно работает только' sContainer.SetValues'. – leAthlon

+0

Почему эта часть кода не работает? В любом случае настройка свойств управления может иметь побочные эффекты. Я думаю, вы должны отказаться от этого подхода. – usr

ответ

0

Используя эту модифицированную версию this, вы можете добавить «ссылку» свойства универсального класса в класс контейнера.

Это позволяет применить одно значение к целому набору значений.

спасибо @Sagi!

Смежные вопросы