No35164 でも説明していますが、 TypeDescriptor.GetProperties(X) で読み書きできるプロパティは、基本的には X 型のコントロールに対してです。Y 型のコントロールのプロパティに対しては TypeDescriptor.GetProperties(Y) でアクセスしてください。
Dim rtbProps = TypeDescriptor.GetProperties(RichTextBox1) Dim rtbBackColor = rtbProps.Find("BackColor", False) MessageBox.Show(rtbBackColor.Converter.ConvertToInvariantString(RichTextBox1))
.Find メソッドで個別に取り出す代わりに、 すべてを列挙するならこんな感じ。
Dim rtbProps = TypeDescriptor.GetProperties(RichTextBox1) For Each p As PropertyDescriptor In rtbProps Debug.WriteLine(StrDup(20, "-"c)) Debug.WriteLine("DisplayName: " & p.DisplayName) Debug.WriteLine("Name: " & p.Name) Debug.WriteLine("Category: " & p.Category) Debug.WriteLine("Description: " & p.Description) Debug.WriteLine("DesignTimeOnly: " & p.DesignTimeOnly) Debug.WriteLine("IsBrowsable: " & p.IsBrowsable) Debug.WriteLine("IsReadOnly: " & p.IsReadOnly) Debug.WriteLine("SerializationVisibility: " & p.SerializationVisibility) Debug.WriteLine("GetChildProperties.Count: " & p.GetChildProperties().Count)
Dim t As Type = RichTextBox1.GetType() For Each p As PropertyInfo In t.GetProperties() Debug.WriteLine(StrDup(20, "-"c)) Debug.WriteLine("Name: " & p.Name) Debug.WriteLine("CanRead: " & p.CanRead) Debug.WriteLine("CanWrite: " & p.CanWrite)
Debug.WriteLine("Value(): """ & String.Format("{0}", p.GetValue(RichTextBox1)) & """") Next
然しながら > 永続化を目的として使う場合は、PropertyDescriptor の方が良さそうですが。 > Dim t As Type = RichTextBox1.GetType() > For Each p As PropertyInfo In t.GetProperties() のPropertyInfoで構文エラーとなります。要因は上記と同じく何かImportsしなくては?。。。