zoukankan      html  css  js  c++  java
  • VS2005下ComboBoxTreeView(下拉列表框弹出树) 与ToolStripComboBoxTreeView(下拉列表框工具条弹出树)的实现

    使用VS2005开发时,发现有很多新东西,比如,我们常用的ToolBar ,MainMenu,StatusBar,变成了功能强大,样式新颖的,ToolStrip,MenuStrip,StatusStrip,等.不过还是有些不足,比如,ComboBox 变化不大,下拉框里面只能是文本的,很不方便,我的想法是在下拉ComboBox时会出现TreeView 控件,这也是我今天要做的控件ComboBoxTreeView
    开始写了一个,关键点是弹出TreeView 控件,但是把TreeView 做成一个窗体,弹出,还是有什么办法,一查VS2005有一个类窗体弹出类(很强大的对象)ToolStripDropDown, 在使用此类的时候需要传递一个ToolStripControlHost类型的对象,还有个问题就是,TreeView 弹出了,会在它的上方出现了一条小白条,这个问题很棘手,不过如果你懂Win32那就一切OK了,好,我们看看这个类吧.
    一:ComboBoxTreeView
    using System.Data;
    using System.Text;
    using System.Windows.Forms;
    namespace WindowsApplication14
    {
        
    public class ComboBoxTreeView : ComboBox
        
    {
            
    private const int WM_LBUTTONDOWN = 0x201, WM_LBUTTONDBLCLK = 0x203;
            ToolStripControlHost treeViewHost;
            ToolStripDropDown dropDown;
            
    public ComboBoxTreeView()
            
    {
                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)
            
    {
                
    this.Text=TreeView.SelectedNode.Text;
                dropDown.Close();
            }

            
    public TreeView TreeView
            
    {
                
    get return treeViewHost.Control as TreeView; }
            }

            
    private void ShowDropDown()
            
    {
                
    if (dropDown != null)
                
    {
                   treeViewHost.Size 
    =new Size(DropDownWidth-2,DropDownHeight);       
                   dropDown.Show(
    this0this.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);
            }

        }


    }

    附图:

    二:
    ToolStrip
    工具条中可以插入文本,下拉框,等,如果要插入下拉树的列表框但不可以直接插入ComboBoxTreeView,必须继承上面提到的ToolStripControlHost类,

    using System;
    using System.Windows;
    using System.Windows.Forms;
    using System.ComponentModel;
    using System.Drawing;
    using System.Drawing.Design;
    using System.Windows.Forms.Design;

    namespace WindowsApplication14
    {
        [DefaultProperty(
    "Items")]
        [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ContextMenuStrip 
    | (ToolStripItemDesignerAvailability.MenuStrip | ToolStripItemDesignerAvailability.ToolStrip))]
        
    public class ToolStripComboBoxTreeView : ToolStripControlHost
        
    {
            ToolStripComboBoxTreeViewControlToolStripComboBoxTreeViewControl
    ToolStripComboBoxTreeViewControl
            
    public ToolStripComboBoxTreeView()
                : 
    base(ToolStripComboBoxTreeView.CreateControlInstance())
            
    {
                ToolStripComboBoxTreeView.ToolStripComboBoxTreeViewControl control 
    = 
                    
    base.Control as ToolStripComboBoxTreeView.ToolStripComboBoxTreeViewControl;
                    control.Owner 
    = this;
                    

            }

            
    private static Control CreateControlInstance()
            
    {
                ComboBox comboBox 
    = new ToolStripComboBoxTreeViewControl();
                
    return comboBox;
            }

            属性属性
    属性
            方法方法
    方法
            事件事件
    事件
           
        }

    }

    附图:

    客户端调用方法:
    public static void Main(){
       toolStripComboBoxTreeView1.TreeView.ImageList = this.imageList1;
                TreeNode root = new TreeNode("根节点",1,2);
                root.Nodes.Add("节点1");
                root.Nodes.Add("节点2");
                root.Nodes.Add("节点3");
                root.Nodes.Add("节点4");
                root.Nodes.Add("节点5");
                root.Nodes.Add("节点6");
                toolStripComboBoxTreeView1.TreeView.Nodes.Add(root);
  • 相关阅读:
    Power BI for Office 365(八)共享查询
    Power BI for Office 365(七) Power BI站点
    Power BI for Office 365(六)Power Map简介
    Power BI for Office 365(五)Power View第二部分
    Power BI for Office 365(四)Power View第一部分
    Power BI for Office 365(三)Power Pivot
    Power BI for Office 365(二)Power Query
    java 继承、重载、重写与多态
    Android 热修复方案Tinker(一) Application改造
    阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
  • 原文地址:https://www.cnblogs.com/top5/p/1699460.html
Copyright © 2011-2022 走看看