2013-02-25 2 views
-1

이 코드와 개체의 모든 인스턴스를 얻을 :C#의 속성 설정

Type type = this.GetType(); 
FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | 
            BindingFlags.Instance); 

하지만 난 때문에 SetValue GET 대상 인스턴스 클래스의 버튼에 Enabled과 같은 속성을 변경할 수 없습니다 나는 이것을 갖고 있지 않습니다. 나는 단지 클래스의 이름과 타입을 가지고있다. 이제 필드에있는 개체의 속성 (사용 가능)을 변경하는 방법입니다.

+3

인스턴스가'this' 우리가 할당 할 값하는 데 도움이 (이 경우, 아마도 부울 ...)

희망 ...입니다. 클래스의 인스턴스에서 Type을 가져옵니다. –

+1

존재하지 않는 것의'Enabled' 속성을 변경하는 것은 의미가 없습니다. 당신이하려는 일과 이유에 대해 자세히 설명해 줄 수 있습니까? – Bobson

+0

@PaulSasik을 되풀이해서보고있는 유형이 'this' 인스턴스의 유형이라면 인스턴스는'this'가 될 것입니다 –

답변

1

반사 코드를 약간 수정 해보십시오. 우선, 객체와 특별히 사용자가 원하는 property을 모두 참조해야합니다. PropertyField과 같지 않습니다.

MyObject.GetType().GetProperty("Enabled").SetValue(MyObject, bEnabled, null); 

MyObject 무엇이든의 유형을 사용하여 버튼이나 형태 또는 무엇이든은 ... 다음, 이름 Enabled하여 속성을 참조 후 다시 MyObject에 대한 그것을 설정하는 것이합니다.

인스턴스를 직접 가져 오기 전에 인스턴스를 변수에 저장할 수 있지만 속성이 필드가 아니라는 것을 다시 기억하십시오.

PropertyInfo[] piSet = MyObject.GetType().GetProperties(); 

당신은 속성 집합을 얻을 수 this를 사용할 수 있지만 this 당신이 활성화/비활성화하려는 컨트롤과 같은 Type 아닌 경우는하지 않는 것이 좋습니다.

추가 편집

나는 그것을 밖으로이있어 질문을 다시 읽은 후 : 당신이 원하는 것 같습니다 것은 다층 반사와 제네릭입니다. 찾고있는 컨트롤은 "this"에 연결된 필드입니다. 당신이 할 수있는 일은이 선을 따라 무엇인가입니다.

Type theType = this.GetType(); 
FieldInfo[] fi = theType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); 
foreach (FieldInfo f in fi) 
{ 
    //Do your own object identity check 
    //if (f is what im looking for) 
    { 
     Control c = f.GetValue(this) as Control; 
     c.Enabled = bEnabled; 
    } 
    //Note: both sets of code do the same thing 
    //OR you could use pure reflection 
    { 
     f.GetValue(this).GetType().GetProperty("Enabled").SetValue(f.GetValue(this), bEnabled, null); 
    } 
} 
0

우선, 실제로 개체의 필드를 사용하고 있습니다.

PropertyInfo[] properties = type.GetProperties(Public | SetProperty | Instance); 

는 것을, 당신의 enabled 속성이 이렇게 설정되어있을 수 있습니다하면 : 당신이 진정으로 쓰기 가능한 속성을 원하는 경우에, 당신이 뭔가를 원하는

targetobject가 Enabled 속성 우리를 개체입니다
myenabledPropertyInfo.SetValue(targetObject, value, null); 

에 관심이 있으며, 값은

관련 문제