2009-11-26 4 views
1

VB.net에서 몇 가지 문제가 있습니다. 사용자가 편집 할 수 있도록 그리드에 표시 할 일련의 개체가 있습니다.등록 정보/등록 정보가 읽기 전용인지 확인

첫 번째 문제는 다음과 같습니다. 개체의 모든 속성 목록을 얻으려면 어떻게해야합니까? 심지어 가능할까요? 사용중인 DataGrid 컨트롤은 문자열 값을 매개 변수로 사용하여 속성 이름을 받아들이지 만 수동으로 삽입하는 것은 많은 문제가 있기 때문에 실제 문제가 될 수 있습니다. 그래서 : 개체의 각 속성의 이름을 가진 문자열 목록을 얻는 방법이 있습니까? 사용자가 속성을 편집하고 있기 때문에 편집 할 수없는 ReadOnly 속성을 표시하는 데 관심이 없습니다. 따라서 내 secodn 문제 : 런타임에 속성이 읽기 전용인지 확인하는 방법이 있습니까?

답변

3

당신은 반사하여이 작업을 수행 할 수 있습니다 당신이 줄 수있는 어떤 도움 (그냥 "그것을 할 수 없다"경우에도)에 미리

감사합니다. 특정 개체의 형식을 가져 오려면 foo.GetType()을 사용하십시오. 그런 다음 Type.GetProperties()을 사용하여 모든 속성을 찾습니다. 각 속성에 대해 PropertyInfo.CanWrite을 사용하여 쓰기 가능 여부를 확인할 수 있습니다.

다음은 간단한 예제 :

여기
Option Strict On 
Imports System 
Imports System.Reflection 

Public class Sample 

    ReadOnly Property Foo As String 
     Get 
      Return "Foo!" 
     End Get 
    End Property 

    Property Bar As String 
     Get 
      Return "Ar!" 
     End Get 
     Set 
      ' Ignored in sample 
     End Set 
    End Property 

End Class 

Public Class Test 

    Public Shared Sub Main() 
     Dim s As Sample = New Sample() 

     Dim t As Type = s.GetType() 
     For Each prop As PropertyInfo in t.GetProperties 
      Console.WriteLine(prop.Name) 
      If Not prop.CanWrite 
       Console.WriteLine(" (Read only)") 
      End If 
     Next prop 
    End Sub 

End Class 
+0

덕분에 신속하고 명확 존, 그냥 내가 무엇을 찾고 있었다. 답변을 수락했습니다! –

0

MyObject의 속성을 통해 어떻게 루프입니다. 존 소총이 말했듯이, 당신의 질문의 두 번째 부분에 도움을 CanWrite 확인 :

Dim MyProperties As System.Reflection.PropertyInfo() = MyObject.GetType().GetProperties() 
For Each prop As System.Reflection.PropertyInfo In MyProperties 
    If prop.CanWrite Then 
     //do stuff 
    End If 
Next 
관련 문제