Я новичок в C#, долгое время программист на C++, им просто интересно когда-то инициализировать свойствоgrid, используя .selectedObjects. Есть ли способ получить содержимое текущих значений в propertygrid.Получение содержимого PropertyGrid?
Бен
Я новичок в C#, долгое время программист на C++, им просто интересно когда-то инициализировать свойствоgrid, используя .selectedObjects. Есть ли способ получить содержимое текущих значений в propertygrid.Получение содержимого PropertyGrid?
Бен
PropertyGrid не выставляет свои внутренности к потребителю.
Однако .Net позволяет выполнять «Refelction» для проверки структуры (и выполнения частей) кода, включая свойства класса.
Here - статья, которая освещает основы отражения. Фактически вы можете видеть больше внутренних элементов с отражением, чем отображается сетка свойств.
Вы должны выполнить итерацию по всем свойствам объекта в сетке, используя 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"
}
Можете уточнить свой вопрос? Если вы устанавливаете SelectedObject, то у вас есть доступ к объекту, который модифицирует PropertyGrid, нет? – jasonh