首页 > 代码库 > ComboTree
ComboTree
首先,要新建一个组件。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Diagnostics;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data;namespace BaseControls{ public partial class DMComboTree : ComboBox { private bool m_blDropShow = false; private bool m_blPopupAutoSize = false; private const int WM_LBUTTONDOWN = 0x201, WM_LBUTTONDBLCLK = 0x203; private ToolStripControlHost treeHost; private ToolStripDropDown dropDown; TreeView vTreeView = new TreeView(); public DMComboTree() { //InitializeComponent(); } public DMComboTree(IContainer container) { container.Add(this); InitializeComponent(); } void DrawTree() { vTreeView.Scrollable = true; //下拉框的大小需要调整树的大小来调整。 vTreeView.Height = 200; vTreeView.NodeMouseDoubleClick -= new TreeNodeMouseClickEventHandler(TreeView_NodeMouseDoubleClick); vTreeView.NodeMouseDoubleClick += new TreeNodeMouseClickEventHandler(TreeView_NodeMouseDoubleClick); treeHost = new ToolStripControlHost(vTreeView); treeHost.AutoSize = true; dropDown = new ToolStripDropDown(); dropDown.Items.Add(treeHost); } protected override void onm ouseClick(MouseEventArgs e) { base.OnMouseClick(e); if (this.Width - e.X < 20) { DrawTree(); dropDown.Show(this, 0, this.Height); vTreeView.ExpandAll(); dropDown.Focus(); } } /// <summary> /// 树形双击事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void TreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { base.Text = e.Node.Text; TreeValue = e.Node.Name; dropDown.Close(); } string _treeValue = http://www.mamicode.com/null; public string TreeValue { get { return _treeValue; } set { _treeValue = value; if (TreeValueChanged != null) { if (TreeValueChanged != null) { TreeValueChanged(this, new EventArgs()); } } } } //protected override void WndProc(ref Message m) //{ // if (m.Msg == WM_LBUTTONDBLCLK || m.Msg == WM_LBUTTONDOWN) // { // if (m_blDropShow) // { // m_blDropShow = false; // } // else // { // m_blDropShow = true; // } // if (m_blDropShow) // { // DrawTree(); // dropDown.Show(this, 0, this.Height); // } // else // { // dropDown.Close(); // } // return; // } // base.WndProc(ref m); //} public void BindTree(DataTable vDt) { var q = from b in vDt.AsEnumerable() where b.Field<Int32>("Parent") == 0 select b; if (q != null && q.Count<DataRow>() > 0) { DataTable dt = q.CopyToDataTable<DataRow>(); q = null; foreach (DataRow dr in dt.Rows) { TreeNode n = new TreeNode(); n.Name = dr["Id"].ToString(); n.Text = dr["Name"].ToString(); BindTree(n, vDt); vTreeView.Nodes.Add(n); } dt.Dispose(); } vDt.Dispose(); //设置一个全部品牌用来取消选择项 TreeNode nullNode = new TreeNode(); nullNode.Name = null; nullNode.Text = "全部品牌"; vTreeView.Nodes.Insert(0, nullNode); } /// <summary> /// 递归绑定Node /// </summary> /// <param name="node"></param> /// <param name="vDt"></param> void BindTree(TreeNode node, DataTable vDt) { var q = from b in vDt.AsEnumerable() where b.Field<Int32>("Parent") == int.Parse(node.Name) select b; if (q != null && q.Count<DataRow>() > 0) { DataTable dt = q.CopyToDataTable<DataRow>(); q = null; foreach (DataRow dr in dt.Rows) { TreeNode n = new TreeNode(); n.Name = dr["Id"].ToString(); n.Text = dr["Name"].ToString(); BindTree(n, vDt); node.Nodes.Add(n); } dt.Dispose(); } } public delegate void OnTreeValueChanged(object sender, EventArgs e); public event OnTreeValueChanged TreeValueChanged; }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。