ComboBoxTree


/*-----2009-03-28
 * ----主要实现ComboBox框的下拉功能TreeView 功能
 * 当TreeView的CheckBoxes属性为false时,当前选择的节点的Name 存储在ComboBox的Tag属性里
*/

using System.Data;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;

public class ComboBoxTree : ComboBox
{
    /// <summary>
    /// 定义鼠标左键点击消息
    /// </summary>
    private const int WM_LBUTTONDOWN = 0x201;
    /// <summary>
    /// 按下鼠标右键
    /// </summary>
    private const int WM_LBUTTONDBLCLK = 0x203;
    //承载自定义控件
    ToolStripControlHost treeViewHost;
    ToolStripDropDown dropDown;

  
    public ComboBoxTree()
    {
        TreeView 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);
    }
    public void treeView_AfterSelect(object sender, TreeViewEventArgs e)
    {
        if (TreeView.CheckBoxes)
        {
            string comboText = "";
            foreach (TreeNode node in TreeView.Nodes)
            {
                if (node.Checked)
                {
                    comboText += node.Text+",";
                }
            }
            if (comboText != "")
            {
                comboText = comboText.Substring(0, comboText.Length - 1);
            }
            this.Text= comboText;         
        }
        else
        {
            this.Text = TreeView.SelectedNode.Text;
            this.Tag = TreeView.SelectedNode.Name;
        }
        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);
        }
    }
    //处理windows消息
    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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值