VB.Net 응용 프로그램에서 PropertyGrid 컨트롤과 함께 사용하도록 클래스를 만들었습니다. 클래스의 속성 중 하나는 :런타임에 속성의 TypeConverter 특성을 변경하는 방법은 무엇입니까?
Private _someProp As String
<Browsable(True), _
BindableAttribute(False), _
DesignOnly(False), _
DescriptionAttribute("Some Property Description"), _
TypeConverter(GetType(propList1)), _
DisplayName("Some Property")> _
Public Property someProp() As String
Get
Return _someProp
End Get
Set(ByVal Value As String)
_someProp = Value
End Set
End Property
내가 런타임에서이 속성의 TypeConverter가 속성을 변경하고 싶습니다. 나는 현재 다른 속성을 변경하고 다음과 같이 (예를 들어, 읽기 전용, 도서 일람.) :
Dim descriptor As PropertyDescriptor = TypeDescriptor.GetProperties(Me.GetType)("someProp")
Dim attrib_r As ReadOnlyAttribute = descriptor.Attributes(GetType(ReadOnlyAttribute))
Dim isReadOnly As System.Reflection.FieldInfo = attrib_r.GetType.GetField("isReadOnly", Reflection.BindingFlags.NonPublic + Reflection.BindingFlags.Instance)
isReadOnly.SetValue(attrib_r, True)
는 그러나, 나는 TypeConverter가 속성을 변경하는 유사한 기술을 적용 할 수 없습니다입니다. 나는 이것을 시도 할 때 typeConv 변수는 '아무것도'없다 :
Dim descriptor As PropertyDescriptor = TypeDescriptor.GetProperties(Me.GetType)("someProp")
Dim attrib As TypeConverterAttribute = descriptor.Attributes(GetType(TypeConverterAttribute))
Dim typeConv As System.Reflection.FieldInfo = attrib.GetType.GetField("typeConverter", Reflection.BindingFlags.NonPublic + Reflection.BindingFlags.Instance)
typeConv.SetValue(attrib, IIf(someCondition, GetType(propList1), GetType(propList2)))
ETA : 이 경우 TypeConverter를 사용자가 적절한 값을 선택하는 대신에 입력 할 수 있도록 PropertyGrid가에있는 드롭 다운을 표시하는 데 사용됩니다 하나. 런타임에이 목록을 변경하고 싶습니다.
, η2 : (어떤 이유에 대한 대답을 삭제하기로 결정) 기여자의 관대 한 도움으로, 내 현재 위치를 내가 typeConv 변수에 필드를 얻을 수 없다는 것입니다,하지만 난 그것을 변경할 수 없습니다. GetType (propeList2)/GetType (propeList2) .AssemblyQualifiedName/a "제공하는 값에 관계없이 typeConv.SetValue 문에서 'System.RuntimeType'형식의 개체를 'System.String'형식으로 변환 할 수 없습니다. 임의의 문자열
Dim typeConv As System.Reflection.FieldInfo = attrib.GetType.GetField("typeName", BindingFlags.Instance Or _
BindingFlags.Public Or _
BindingFlags.NonPublic Or _
BindingFlags.FlattenHierarchy)
typeConv.SetValue(attrib, value)
아마도 [Convert.ChangeType] (http://msdn.microsoft.com/en-us/library/dtb69x08.aspx) 방법을 찾고 있을지 모르지만, 아마도 귀하의 요구 사항을 오해했습니다. –
감사합니다. @TimSchmelter. 나는 그것이 후자라고 생각한다. 이 경우 TypeConverter는 PropertyGrid에 드롭 다운을 표시하는 데 사용되므로 사용자가 입력하는 대신 적절한 값을 선택할 수 있습니다. 런타임에이 목록을 변경하고 싶습니다. – Apeksha