在winform中怎样把整个treeview加入combobox?
winform没有dropdownlist

解决方案 »

  1.   

    自己做个usercontrol吧,放一个combox下面放treeview,点击下拉时,当然可以不用combox,用一个edit+button模仿,点击button时,显示treeview
      

  2.   

    http://www.codeproject.com/Articles/17592/DropDownPanel
    http://www.codeproject.com/Articles/3994/Custom-ComboBoxes-with-Advanced-Drop-down-Features
      

  3.   

    用一个edit+button模仿,点击button时,显示treeview,但是隐藏时treeview会占用空间
      

  4.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;
    using IMSP.Sysmodule.Agent;namespace IMSP.Sysmodule.UIControl
    {
        public class ComboBoxTreeView : ComboBox
        {
            private const int WM_LBUTTONDOWN = 0x201, WM_LBUTTONDBLCLK = 0x203;
            ToolStripControlHost treeViewHost;
            ToolStripDropDown dropDown;
            private TreeNode curnode;
            private Int32 keyid;
            private string showtext;
            TreeView treeView;
            public ComboBoxTreeView()
            {
                treeView = new TreeView();
                treeView.AfterSelect += new TreeViewEventHandler(treeView_AfterSelect);
                treeView.BorderStyle = BorderStyle.None;            treeViewHost = new ToolStripControlHost(treeView);
                dropDown = new ToolStripDropDown();
                dropDown.Width = this.Width;
                dropDown.Items.Add(treeViewHost);
                this.TextChanged += new EventHandler(ComboBoxTreeView_TextChanged);
            }        void ComboBoxTreeView_TextChanged(object sender, EventArgs e)
            {
                if (curnode != null)
                    this.Text = curnode.Text;
                else
                    this.Text = "无";
            }        public TreeNode CurrNode
            {
                get { return curnode; }
                set { curnode = value; }
            }        public Int32 KeyId
            {
                get { return keyid; }
                set
                {
                    keyid = value;
                    try
                    {
                        foreach (OctrNode node in get_currnode_allson())
                        {
                            if (node.Key == keyid)
                            {
                                curnode = node;
                                TreeView.SelectedNode = node;
                                this.Text = curnode.Text;
                                return;
                            }
                        }
                    }
                    catch { };
                    curnode = null;
                    this.Text = "无";
                    return;
                }
            }        ArrayList tmpnode = new ArrayList();
            private void set_curnode_alllist(OctrNode _curnode)
            {
                foreach (OctrNode node in _curnode.Nodes)
                {
                    tmpnode.Add(node);
                    set_curnode_alllist(node);
                }
            }
            public OctrNode[] get_currnode_allson()
            {
                tmpnode.Clear();            foreach (OctrNode _node in TreeView.Nodes)
                {
                    //if (_inculdself) tmpnode.Add(curnode);
                    tmpnode.Add(_node);
                    set_curnode_alllist(_node);
                }
                OctrNode[] retnode = new OctrNode[tmpnode.Count];
                tmpnode.CopyTo(retnode);
                return retnode;
            }        public OctrNode[] get_currnode_allson(bool _inculdself)
            {
                tmpnode.Clear();
                if (_inculdself) tmpnode.Add(curnode);
                foreach (OctrNode _node in curnode.Nodes)
                {
                    tmpnode.Add(_node);
                    set_curnode_alllist(_node);
                }
                OctrNode[] retnode = new OctrNode[tmpnode.Count];
                tmpnode.CopyTo(retnode);
                return retnode;
            }        public string ShowText
            {
                get { return showtext; }
                set { showtext = value; }
            }        public void treeView_AfterSelect(object sender, TreeViewEventArgs e)
            {
                curnode = TreeView.SelectedNode;
                this.Text = curnode.Text;
                try
                {
                    keyid = ((OctrNode)curnode).Key;
                }
                catch
                {
                    // keyid = 0;
                }
                dropDown.Close();
            }
            public TreeView TreeView
            {
                get { return treeViewHost.Control as TreeView; }
            }
            private void ShowDropDown()
            {
                if (dropDown != null)
                {
                    treeViewHost.Size = new System.Drawing.Size(DropDownWidth - 2, DropDownHeight);
                    dropDown.Show(this, 0, this.Height);
                }
            }        protected override void WndProc(ref Message m)
            {
                if (m.Msg == WM_LBUTTONDBLCLK || m.Msg == WM_LBUTTONDOWN)
                {
                    ShowDropDown();
                    return;
                }
                base.WndProc(ref m);
            }        protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    if (dropDown != null)
                    {
                        dropDown.Dispose();
                        dropDown = null;
                    }
                }
                base.Dispose(disposing);
            }
        }
    }
    一个组件,仅供参考。