У меня есть программа, в которой я загружаю DLL, содержащую различные типы объектов.При загрузке я создаю экземпляр каждого типа и сохраняю его в виде дерева (эти объекты могут содержать другие объекты внутри).Целью программы является редактирование этих объектов, поэтому у меня есть propertyGrid, который позволяет мне редактировать выбранный объект в древовидной структуре.Это прекрасно работает практически для каждого объекта.У меня просто возникают проблемы при редактировании объектов со свойствами, типами которых являются List of xObjectType, и этот xObjectType имеет свойство yObjectType as: например, эти классы определены в DLL, но мне нужно редактировать FunctionCommand, однако, когда я выбираю свойство Function вpropertyGrid - это CollectionEditor, этот редактор коллекций работает нормально, когда внутренние свойства имеют тип int, string, byte [] и т. д. Однако я не могу редактировать свойства, которые являются более сложными объектами.В этом случае свойство RFunction отключено.
public partial class FunctionCommand
{
/// <summary> Number of functions sent as part of the command</summary>
public uint TotalNoOfFunctions { get; set; }
/// <summary> Message structure for the function definition. Cloud shall always set this.</summary>
public List<Function> Function { get; set; }
}
public partial class Function
{
public enum StoragePriorityENUM
{
LOW = 0,
HIGH = 1,
}
/// <summary> Function id to uniquely identify a function</summary>
public string FunctionId { get; set; }
/// <summary> Set this ONLY for R function</summary>
public RFunction RFunction { get; set; }
}
public partial class RFunction
{
/// <summary> Diagnostics data for R function</summary>
public DIAGData DiagData { get; set; }
/// <summary>shall start the diagnostic process with a delay(minutes)</summary>
public uint DelayTimeToStart { get; set; }
}
Я могу корректно редактировать эти типы объектов вне CollectionEditor, но не внутри него.Почему это конкретное свойство недоступно для редактирования? Как я могу сделать так, чтобы редактировать сложные объекты внутри CollectionEditor?
Редактировать: так я создаю экземпляры в древовидном представлении, это включает создание экземпляраList <> если это необходимо, переменная «types» представляет собой список, который включает в себя все типы из DLL:
private TreeNode GetSubTypes(Type subType, ref TreeNode rootObj, List<TreeNode> treenodeObj)
{
foreach (PropertyInfo prop in subType.GetProperties())
{
Type subtemp = null;
Type[] temp = prop.PropertyType.GenericTypeArguments;
if (temp.Length> 0)
{
subtemp = temp[0];
}
var childObj = new TreeNode();
if (types.Contains(prop.PropertyType) || subtemp!=null)
{
childObj.Text = prop.Name;
childObj.Tag = Activator.CreateInstance(prop.PropertyType);
if (subtemp != null)
{
var listType = typeof(List<>);
var constructedListType = listType.MakeGenericType(subtemp);
prop.SetValue(rootObj.Tag, Activator.CreateInstance(constructedListType));
}
}
else
{
childObj.Text = prop.Name;
childObj.Tag = "";
}
GetSubTypes(prop.PropertyType, ref childObj, treenodeObj);
if(childObj.Text!="") rootObj.Nodes.Add(childObj);
if (!usedTypes.Contains(prop.PropertyType.Name))
usedTypes.Add(prop.PropertyType.Name);
treenodeObj.RemoveAll(x => x.Text == prop.PropertyType.Name);
treenodeObj.RemoveAll(x => x.Text == "");
}
return null;
}