我做了个复合控件,暂且命名为xyz,该控件包含个treeview控件,该控件有个属性Items返回的是子控件treeview的Nodes属性,我为Items属性编写了个编辑器,代码如下:
private class DropDownTreeNodeCollectionEditor :UITypeEditor
{
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
IDesignerHost service = (IDesignerHost)context.GetService(typeof(IDesignerHost));
DropDownTreeView dropDownTreeView = (DropDownTreeView)context.Instance;
TreeView treeView = dropDownTreeView._treeView;//子控件
if (context.Container.Components["dropTreeView"] == null) context.Container.Add(treeView, "dropTreeView");
TreeViewDesigner treeViewDesigner = (TreeViewDesigner)service.GetDesigner(context.Container.Components["dropTreeView"]);
edSvc.ShowDialog(GetTreeNodeCollectionEditorForm(treeView, treeViewDesigner));
return value;
}
//获取TreeNode节点编辑器窗体
private System.Windows.Forms.Form GetTreeNodeCollectionEditorForm(System.Web.UI.WebControls.TreeView treeView, TreeViewDesigner treeViewDesigner)
{
Assembly asm = Assembly.Load("System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
System.Windows.Forms.Form form = (System.Windows.Forms.Form)asm.CreateInstance("System.Web.UI.Design.WebControls.TreeNodeCollectionEditorDialog", false, BindingFlags.CreateInstance, null, new object[] { treeView, treeViewDesigner }, null, null);
return form;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
if (context != null)
return UITypeEditorEditStyle.Modal;
return base.GetEditStyle(context);
}
}
当我点击Items属性后的按钮时,能弹出treeview节点编辑器窗体,但是增加节点后,能保存在这个窗体中,但是节点不能自动添加到源视图该控件的Items属性当中,即不能保存添加的节点,不知各位有什么办法能同步属性,是要回调什么方法吗?