⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nodetypeeditor.cs

📁 浏览器端看到树型目录结构,用户可以完整地看到像windows资源管理器一样的效果
💻 CS
字号:
//------------------------------------------------------------------------------
// Copyright (c) 2000-2003 Microsoft Corporation. All Rights Reserved.
//------------------------------------------------------------------------------

namespace Microsoft.Web.UI.WebControls.Design
{
    using System;
    using System.ComponentModel;
    using System.Drawing.Design;
    using System.Windows.Forms.Design;
    using System.Web.UI.Design;
    using Microsoft.Web.UI.WebControls;
    using System.Windows.Forms;

    /// <summary>
    /// Provides an editor for visually selecting or editting a NodeType property.
    /// </summary>
    public class NodeTypeEditor : UITypeEditor 
    {
        /// <summary>
        /// Gets the editting style of the Edit method.
        /// </summary>
        /// <param name="context">The context</param>
        /// <returns>The style</returns>
        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
        {
            return UITypeEditorEditStyle.DropDown;
        }

        /// <summary>
        /// Edits the specified object value using the editor style provided by GetEditorStyle.
        /// </summary>
        /// <param name="context">Context</param>
        /// <param name="provider">Provider</param>
        /// <param name="value">The value to edit</param>
        /// <returns>The editted value</returns>
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            if (provider != null)
            {
                IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));

                if (edSvc != null) 
                {
                    object node = null;

                    if ((context.Instance is BaseChildNode) ||
                        (context.Instance is Microsoft.Web.UI.WebControls.TreeView))
                    {
                        node = context.Instance;
                    }
                    else if (context.Instance is object[])
                    {
                        object[] components = (object[])context.Instance;
                        if (components[0] is BaseChildNode)
                        {
                            node = components[0];
                        }
                    }

                    while ((node != null) && (node is BaseChildNode))
                    {
                        node = ((BaseChildNode)node).Parent;
                    }

                    if ((node != null) && (node is Microsoft.Web.UI.WebControls.TreeView))
                    {
                        TreeNodeTypeCollection nodeTypes = ((Microsoft.Web.UI.WebControls.TreeView)node).TreeNodeTypes;
                        ListBox list = new ListBox();
                        TreeNodeType origVal = null;

                        foreach (TreeNodeType nodeType in nodeTypes)
                        {
                            if ((nodeType.Type != String.Empty) && (nodeType.Type == (string)value))
                            {
                                origVal = nodeType;
                            }
                            list.Items.Add(nodeType);
                        }

                        // Set the initial SelectedIndex
                        if (origVal != null)
                        {
                            int selectedIndex = list.Items.IndexOf(origVal);
                            if (selectedIndex >= 0)
                            {
                                list.SelectedIndex = selectedIndex;
                            }
                        }

                        // Set the style
                        list.BorderStyle = BorderStyle.None;

                        // Respond to changes
                        list.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged);

                        // Run the control
                        _edSvc = edSvc;
                        edSvc.DropDownControl(list);
                        _edSvc = null;

                        if ((list.SelectedItem != null) && 
                            (list.SelectedItem != origVal))
                        {
                            value = ((TreeNodeType)list.SelectedItem).Type;
                        }
                    }
                }
            }

            return value;
        }

        private IWindowsFormsEditorService _edSvc = null;

        private void OnSelectedIndexChanged(Object source, EventArgs e)
        {
            _edSvc.CloseDropDown();
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -