private GuerillaBlock FindParent(GuerillaBlock block, GuerillaBlock searchBlock) { if (ParentLookup.ContainsKey(block)) { return(ParentLookup[block]); } foreach (var fieldInfo in searchBlock.GetType( ).GetFields( )) { // If the field is a GuerillaBlock or an array of GuerillaBlocks if (fieldInfo.FieldType.IsSubclassOf(typeof(GuerillaBlock))) { if (( GuerillaBlock )fieldInfo.GetValue(searchBlock) == block) { ParentLookup.Add(block, searchBlock); return(searchBlock); } } if (fieldInfo.FieldType.IsArray && fieldInfo.FieldType.GetElementType( ).IsSubclassOf(typeof(GuerillaBlock))) { var guerillaBlocks = ( GuerillaBlock[] )fieldInfo.GetValue(searchBlock); foreach (var guerillaBlock in guerillaBlocks) { if (guerillaBlock == block) { ParentLookup.Add(block, searchBlock); return(searchBlock); } FindParent(block, guerillaBlock); } } } return(null); }
public void Display(GuerillaBlock block) { if (block == null) { block = _block; } _activeBlock = block; var fields = block.GetType( ).GetFields( ); dataGridView1.DataSource = fields.Select(u => new { u.Name, Value = u.GetValue(block) }).ToList( ); }
public void LoadGuerillaBlocks(GuerillaBlock guerillaBlock) { _guerillaBlock = guerillaBlock; if (guerillaBlock == null) { return; } var fields = guerillaBlock.GetType( ).GetFields( ); treeView1.Nodes.Clear( ); treeView1.Nodes.AddRange(ParseChildNodes(fields, guerillaBlock)); treeView1.ExpandAll( ); }