2009-07-23 2 views
1

Я новичок в C#, долгое время программист на C++, им просто интересно когда-то инициализировать свойствоgrid, используя .selectedObjects. Есть ли способ получить содержимое текущих значений в propertygrid.Получение содержимого PropertyGrid?

Бен

+0

Можете уточнить свой вопрос? Если вы устанавливаете SelectedObject, то у вас есть доступ к объекту, который модифицирует PropertyGrid, нет? – jasonh

ответ

0

PropertyGrid не выставляет свои внутренности к потребителю.

Однако .Net позволяет выполнять «Refelction» для проверки структуры (и выполнения частей) кода, включая свойства класса.

Here - статья, которая освещает основы отражения. Фактически вы можете видеть больше внутренних элементов с отражением, чем отображается сетка свойств.

0

Вы должны выполнить итерацию по всем свойствам объекта в сетке, используя Reflection, основанную на типе объекта.

object o = PropertyGrid.SelectedObject; 
Type t = o.GetType(); // We will work on type "t" 
List<MemberInfo> members = new List<MemberInfo>(); 
members.AddRange(t.GetProperties(BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance); // Get the public instance properties list 
foreach (MemberInfo member in members) 
{ 
    Type type = null; 
    object value = null; 
    PropertyInfo pi = (member as PropertyInfo); 
    type = pi.PropertyType; 
    if (type.IsSubclassOf(typeof(CollectionBase))) 
     continue; // Sorry 
    if (pi.GetCustomAttributes(typeof(NotSerializedAttribute), true).GetLength(0) > 0) 
     continue; 
    if (!pi.CanRead || !pi.CanWrite) 
     continue; 
    value = pi.GetValue(o, null); 
    // TODO Print out, or save the "value" 
} 
Смежные вопросы