当前位置:编程学习 > C#/ASP.NET >>

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

在winform中怎样把整个treeview加入combobox?
winform没有dropdownlist --------------------编程问答-------------------- 自己做个usercontrol吧,放一个combox下面放treeview,点击下拉时,当然可以不用combox,用一个edit+button模仿,点击button时,显示treeview --------------------编程问答-------------------- 好像只能自己写个自定义控件,vs肯定是不带的 --------------------编程问答-------------------- http://www.codeproject.com/Articles/17592/DropDownPanel
http://www.codeproject.com/Articles/3994/Custom-ComboBoxes-with-Advanced-Drop-down-Features --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
自己做个usercontrol吧,放一个combox下面放treeview,点击下拉时,当然可以不用combox,用一个edit+button模仿,点击button时,显示treeview

用一个edit+button模仿,点击button时,显示treeview,但是隐藏时treeview会占用空间 --------------------编程问答--------------------
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);
        }
    }
}

一个组件,仅供参考。 --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
自己做个usercontrol吧,放一个combox下面放treeview,点击下拉时,当然可以不用combox,用一个edit+button模仿,点击button时,显示treeview

正解
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,