private void ClassBrowseB_Click(object sender, EventArgs e) { List <AssemblyDllInfo> assemblies = new List <AssemblyDllInfo>(); if (_tvdml.AssembliesList != null) { assemblies = (_tvdml.AssembliesList as List <AssemblyDllInfo>); } ClassChooserDialogForm ccdf = new ClassChooserDialogForm(); ccdf.LoadedAssemblies = assemblies; DialogResult dr = ccdf.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { var eitem = ccdf.EditableItem; ClassNameEd.Text = eitem.ToString(); try { MainTree.Nodes.Clear(); PropertiesEd.SelectedObject = null; object obj = (ccdf.EditableItem as Type).Assembly.CreateInstance((ccdf.EditableItem as Type).FullName); _tvdml = anvlib.Classes.TypedTreeViewDisplayMemberList.GenerateTreeDescriptionFromObject(obj, null); GenerateTree(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } _tvdml.AssembliesList = ccdf.LoadedAssemblies; }
public TypedTreeViewDataSourceDescriptionDialogForm(TypedTreeViewDisplayMemberList tvdml) { _tvdml = tvdml; InitializeComponent(); if (_tvdml.Count > 0) GenerateTree(); }
public TypedTreeViewDataSourceDescriptionDialogForm(TypedTreeViewDisplayMemberList tvdml) { _tvdml = tvdml; InitializeComponent(); if (_tvdml.Count > 0) { GenerateTree(); } }
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { /*IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (edSvc == null) MessageBox.Show("1"); else MessageBox.Show(edSvc.GetType().ToString());*/ if (value == null) value = new TypedTreeViewDisplayMemberList(); //MessageBox.Show(context.GetType().ToString()); TypedTreeViewDisplayMemberList obj_state = (value as TypedTreeViewDisplayMemberList).Clone(); TypedTreeViewDataSourceDescriptionDialogForm dsddf = new TypedTreeViewDataSourceDescriptionDialogForm(obj_state); DialogResult dr = dsddf.ShowDialog(); if (dr == DialogResult.OK) value = dsddf.TypedTreeViewDisplayMemberList; return value; }
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { /*IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); * if (edSvc == null) * MessageBox.Show("1"); * else * MessageBox.Show(edSvc.GetType().ToString());*/ if (value == null) { value = new TypedTreeViewDisplayMemberList(); } //MessageBox.Show(context.GetType().ToString()); TypedTreeViewDisplayMemberList obj_state = (value as TypedTreeViewDisplayMemberList).Clone(); TypedTreeViewDataSourceDescriptionDialogForm dsddf = new TypedTreeViewDataSourceDescriptionDialogForm(obj_state); DialogResult dr = dsddf.ShowDialog(); if (dr == DialogResult.OK) { value = dsddf.TypedTreeViewDisplayMemberList; } return(value); }
private void ClassNameEd_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { try { var type = Type.GetType(ClassNameEd.Text); object obj = Activator.CreateInstance(type); if (obj != null) { _tvdml = anvlib.Classes.TypedTreeViewDisplayMemberList.GenerateTreeDescriptionFromObject(obj, null); GenerateTree(); } else { MessageBox.Show("Null"); } } catch (Exception e1) { MessageBox.Show(e1.Message); } } }
private void ClassBrowseB_Click(object sender, EventArgs e) { List<AssemblyDllInfo> assemblies = new List<AssemblyDllInfo>(); if (_tvdml.AssembliesList != null) assemblies = (_tvdml.AssembliesList as List<AssemblyDllInfo>); ClassChooserDialogForm ccdf = new ClassChooserDialogForm(); ccdf.LoadedAssemblies = assemblies; DialogResult dr = ccdf.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { var eitem = ccdf.EditableItem; ClassNameEd.Text = eitem.ToString(); try { MainTree.Nodes.Clear(); PropertiesEd.SelectedObject = null; object obj = (ccdf.EditableItem as Type).Assembly.CreateInstance((ccdf.EditableItem as Type).FullName); _tvdml = anvlib.Classes.TypedTreeViewDisplayMemberList.GenerateTreeDescriptionFromObject(obj, null); GenerateTree(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } _tvdml.AssembliesList = ccdf.LoadedAssemblies; }
private void ClassNameEd_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { try { var type = Type.GetType(ClassNameEd.Text); object obj = Activator.CreateInstance(type); if (obj != null) { _tvdml = anvlib.Classes.TypedTreeViewDisplayMemberList.GenerateTreeDescriptionFromObject(obj, null); GenerateTree(); } else MessageBox.Show("Null"); } catch (Exception e1) { MessageBox.Show(e1.Message); } } }
/// <summary> /// Метод заполняющий контролсы типа TreeView /// </summary> /// <param name="DataSource">Источник данных</param> /// <param name="TreeLeafsInfo">Описание дерева</param> protected virtual void FillTreeView(TreeView ctrl, object DataSource, TypedTreeViewDisplayMemberList TreeLeafsInfo) { ControlFiller.FillTreeViewControl(ctrl, DataSource, TreeLeafsInfo); }
/// <summary> /// Метод заполняющий контролсы типа TreeView /// </summary> /// <param name="DataSource">Источник данных</param> /// <param name="TreeLeafsInfo">Описание дерева</param> protected virtual void FillTreeView(object DataSource, TypedTreeViewDisplayMemberList TreeLeafsInfo) { ControlFiller.FillTreeViewControl((listControl as TreeView), DataSource, TreeLeafsInfo); }
public TypedTreeView() { _tvdml = new TypedTreeViewDisplayMemberList(); _tvdml.Parent = this; }
/// <summary> /// Добавочный метод к FillTreeViewControl, рекурсивно заполняющий TreeView /// </summary> /// <param name="tr">TreeView контролс</param> /// <param name="DataSource">Источник данных</param> /// <param name="TreeLeafsInfo">Описание дерева</param> /// <returns></returns> private static TreeNode CreateLeafs(TreeNode tr, object DataSource, TypedTreeViewDisplayMemberList TreeLeafsInfo) { //--Сделать разбор атрибутов типа DisplayName!!! foreach (var Leaf in TreeLeafsInfo) { //--Если датасорц - Коллекция. Не понимаю зачем я сделал проверку на строку...поизучай этот вопрос на досуге if ((DataSource is System.Collections.IEnumerable) && DataSource.GetType() != typeof(string)) { #region Цикл по коллекции var collection = (DataSource as System.Collections.IEnumerable); foreach (var item in collection) { bool to_be_continue = false; object text; //--если строка, то идем к следующему элементу коллекции if (item.GetType() == typeof(string)) to_be_continue = true; #region Если есть только DataSource if (item.GetType().GetProperty(Leaf.DisplayMember) == null && !string.IsNullOrEmpty(Leaf.DataSourceName)/* && !to_be_continue*/) { //--если это примитивное значение if (!item.GetType().IsClass) text = item; else//--иначе это Класс { //--переделать на DisplayCaption if (!string.IsNullOrEmpty(Leaf.DisplayСaption)) text = Leaf.DisplayСaption; else { text = "";//--проверить нужен ли вообще этот участок кода!!! if (!(item is System.Collections.IEnumerable)) { var val = item.GetType().GetProperty(Leaf.DataSourceName).GetValue(item, null); text = val.GetType().GetProperty(Leaf.DisplayMember).GetValue(val, null); } } } } else { if (string.IsNullOrEmpty(Leaf.DisplayMember)) to_be_continue = true; //--если элемент не строка и DisplayMember != null if (!to_be_continue) { if (item is System.Collections.IEnumerable) { text = ""; if (!string.IsNullOrEmpty(Leaf.DisplayСaption)) text = Leaf.DisplayСaption; } else text = item.GetType().GetProperty(Leaf.DisplayMember).GetValue(item, null); } else { if (!string.IsNullOrEmpty(Leaf.DisplayСaption)) text = Leaf.DisplayСaption; else text = item; } } #endregion #region Если мы считали какоето значение в переменную text if (text != null) { TreeNode mnode = new TreeNode(text.ToString()); if (!Leaf.WithoutTag) mnode.Tag = item; //--если индекс картинки мы берем из какого то поля в классе if (string.IsNullOrEmpty(Leaf.ImageIndexByFieldName)) { mnode.ImageIndex = Leaf.ImageIndex; mnode.SelectedImageIndex = Leaf.SelectedImageIndex; mnode.StateImageIndex = Leaf.StateImageIndex; } else { object im_idx=null; if (Leaf.ImageIndexByFieldName.IndexOf('.') == -1) im_idx = item.GetType().GetProperty(Leaf.ImageIndexByFieldName).GetValue(item, null); else im_idx = anvlib.Utilites.ObjectInspector.GetObjectPropertyValueRecursive(item, Leaf.ImageIndexByFieldName); if (im_idx != null && im_idx.GetType() == typeof(int)) { mnode.ImageIndex = (int)im_idx; mnode.SelectedImageIndex = (int)im_idx; mnode.StateImageIndex = (int)im_idx; } } tr.Nodes.Add(mnode); #region Если есть дочерние ветки if (Leaf.ChildDisplayMembers != null) { foreach (var SubLeaf in Leaf.ChildDisplayMembers) { if (SubLeaf.DataSourceName != null) { if (Leaf.DataSourceName != SubLeaf.DataSourceName || SubLeaf.IsRecusiveCollection) { //--переделать на DisplayCaption if (!string.IsNullOrEmpty(SubLeaf.DisplayMember) && !string.IsNullOrEmpty(SubLeaf.DisplayСaption)) { TypedTreeViewDisplayMemberList tdml = new TypedTreeViewDisplayMemberList(); tdml.Add(SubLeaf); CreateLeafs(mnode, item, tdml); } else { var innercol = item.GetType().GetProperty(SubLeaf.DataSourceName).GetValue(item, null); TypedTreeViewDisplayMemberList tdml = new TypedTreeViewDisplayMemberList(); tdml.Add(SubLeaf); CreateLeafs(mnode, innercol, tdml); } } else { TypedTreeViewDisplayMemberList tdml = new TypedTreeViewDisplayMemberList(); tdml.Add(SubLeaf); CreateLeafs(mnode, item, tdml); } } else { TypedTreeViewDisplayMemberList tdml = new TypedTreeViewDisplayMemberList(); tdml.Add(SubLeaf); CreateLeafs(mnode, SubLeaf.DisplayMember, tdml); } } } #endregion } #endregion } #endregion } else { //--если DataSource = null, но является не коллекцией if (DataSource != null) { object text; if (!string.IsNullOrEmpty(Leaf.DisplayMember) && !string.IsNullOrEmpty(Leaf.DisplayСaption)) text = Leaf.DisplayMember.Remove(0, 7); else { text = ""; if (!(DataSource is ValueType) && DataSource.GetType() != typeof(string)) { if (!string.IsNullOrEmpty(Leaf.DisplayMember)) text = DataSource.GetType().GetProperty(Leaf.DisplayMember).GetValue(DataSource, null); else if (!string.IsNullOrEmpty(Leaf.DisplayСaption)) text = Leaf.DisplayСaption; else text = DataSource; } } if (text != null) { TreeNode mnode = new TreeNode(text.ToString()); if (!Leaf.WithoutTag) mnode.Tag = DataSource; if (string.IsNullOrEmpty(Leaf.ImageIndexByFieldName)) { mnode.ImageIndex = Leaf.ImageIndex; mnode.SelectedImageIndex = Leaf.SelectedImageIndex; mnode.StateImageIndex = Leaf.StateImageIndex; } else { var im_idx = DataSource.GetType().GetProperty(Leaf.ImageIndexByFieldName).GetValue(DataSource, null); if (im_idx != null && im_idx.GetType() == typeof(int)) { mnode.ImageIndex = (int)im_idx; mnode.SelectedImageIndex = (int)im_idx; mnode.StateImageIndex = (int)im_idx; } } tr.Nodes.Add(mnode); if (Leaf.ChildDisplayMembers != null) { foreach (var SubLeaf in Leaf.ChildDisplayMembers) { if (DataSource.GetType() != typeof(string)) { var innercol = DataSource.GetType().GetProperty(SubLeaf.DataSourceName).GetValue(DataSource, null); TypedTreeViewDisplayMemberList tdml = new TypedTreeViewDisplayMemberList(); tdml.Add(SubLeaf); CreateLeafs(mnode, innercol, tdml); } else { TypedTreeViewDisplayMemberList tdml = new TypedTreeViewDisplayMemberList(); tdml.Add(SubLeaf); CreateLeafs(mnode, SubLeaf.DataSourceName, tdml); } } } } } } } return tr; }
/// <summary> /// Метод заполняющий контрол типа TreeView /// </summary> /// <param name="treeview">Контролс, в котором мы будем работать</param> /// <param name="DataSource">Коллекция или объект из которого мы будем строить дерево. /// Точнее даже это и есть само дерево, только не построенное в тривью</param> /// <param name="TreeLeafsInfo">Описание структуры дерева. /// Можно делать несколько веток парента, но только один уровень вложенности, паернт.парент не продуман пока</param> public static void FillTreeViewControl(TreeView treeview, object DataSource, TypedTreeViewDisplayMemberList TreeLeafsInfo) { TreeNode tr = new TreeNode(); tr = CreateLeafs(tr, DataSource, TreeLeafsInfo); foreach (TreeNode item in tr.Nodes) treeview.Nodes.Add(item); }