开发环境基于VSTO:visual studio 2010,VB .Net,excel 2007,文档级别的定制程序。
需求是在sheet的左侧停靠System.Windows.Forms.TreeView控件,实现类似资源浏览器的效果,另外,tree节点使用自定义的图标,支持复选框。

首先准备好树节点的图标,使用visual studio 2010自带的图标可以省去很多麻烦(在安装目录\Common7\VS2010ImageLibrary)。我挑选了4个16x16大小的图标拷贝到vsto工程下的Resources目录下。通过Project->xxx Properties->Resources->AddResource->Add Existing File添加图标到工程中,代码中就可以用My.Resources.aaa的方式引用了(aaa为图标名称)。

接下来,在sheet初始化函数中完成图标与TreeView控件的初始化代码,如果TreeView控件的内容需要随sheet数据变化而刷新,还需要在sheet_change函数中添加代码。

Public Class Sheet1  
      
    Public WithEvents m_tree As New TreeView  
    Public m_imageList As New ImageList  
      
    Private Sub Sheet1_Startup() Handles Me.Startup  
      
        m_imageList.ColorDepth = ColorDepth.Depth32Bit  
        '第一个参数为ImageKey,类似Image名称的作用  
        m_imageList.Images.Add("cfg", My.Resources.book_notebook)  
        m_imageList.Images.Add("algo", My.Resources._075b_UpFolder_16x16_72)  
        m_imageList.Images.Add("scen", My.Resources.PlayHS)  
        m_imageList.Images.Add("warning", My.Resources._109_AllAnnotations_Warning_16x16_72)  
      
        Globals.ThisWorkbook.ActionsPane.Controls.Add(m_tree)  
        Application.CommandBars("Task Pane").Position = Microsoft.Office.Core.MsoBarPosition.msoBarLeft  
      
        m_tree.ImageList = m_imageList  
        m_tree.CheckBoxes = True  
        'tree的dock自动调整大小,需要在add到pane后再设置,否则不会生效  
        m_tree.Dock = DockStyle.Fill  
         
        With m_tree  
            .BeginUpdate()  
      
            .Nodes.Clear()  
            .Nodes.Add(New TreeNode(Me.Name))  
            .Nodes().ImageKey = "cfg"  
            .Nodes().SelectedImageKey = "cfg"  
              
            Dim idx As Integer = .Nodes.Add(New TreeNode("Node1"))  
            .Nodes(idx).ImageKey = "algo"  
            .Nodes(idx).SelectedImageKey = "algo"  
                      
            Dim idx2 As Integer = .Nodes(idx).Nodes.Add(New TreeNode("case1_5M"))  
            .Nodes(idx).Nodes(idx2).ImageKey = "scen"  
            .Nodes(idx).Nodes(idx2).SelectedImageKey = "scen"  
      
            .EndUpdate()  
        End With  
          
    End Sub  
      
    Private Sub Sheet1_Change(Target As Microsoft.Office.Interop.Excel.Range) Handles Me.Change 
        'do Tree Refresh  
    End Sub  
      
End Class 

效果图:

在工作表左侧中添加TreeView控件的更多相关文章

  1. TWaver初学实战——如何在TWaver属性表中添加日历控件?

    在日期输入框中添加日历控件,是一种非常流行和实用的做法.临渊羡鱼不如退而写代码,今天就看看在TWaver中是如何实现的.   资源准备   TWaver的在线使用文档中,就有TWaver Proper ...

  2. WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html 在B/S开发中,对TreeView控件要改变当前选中节点的 ...

  3. 如何在VS2010中添加ActiveX控件及使用方法

    方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...

  4. VC中添加web控件的方法

    在VC中使用WebBrowser控件的两方法 黄森堂(vcmfc)著 ClassWizard方式: 1.创建包装类:View->ClassWizard->Add Class->For ...

  5. VS工具箱中添加DevExpress控件

    关闭所有VS进程: ①使用控制台进入DevExpress安装目录: D:\DevExpress\Components\Tools\ ②添加DevExpress控件:ToolboxCreator.exe ...

  6. 在xib中添加手势控件后运行可能会出现的错误

    如果出现错误: // -[UITapGestureRecognizer superview]: unrecognized selector sent to instance 0x8e407a0 // ...

  7. 如何在vs2010中添加Picture控件

    1.新建项目,并在对话框控件中拖入picture控件,并做如下设置 2.在picture控件的属性栏需要进行如下修改:ID需要修改,不能为static ID是控件的唯一标识,PictureCtrl(p ...

  8. ASP.Net中的TreeView控件中对节点的上移和下移操作

    Web中的TreeView中的没有PreNode和NextNode属性. 但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点. TreeView中要么只有一个根节点:要么 ...

  9. Android 动态背景的实现以及SurfaceView中添加EditText控件

    首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...

随机推荐

  1. KNN 算法,以及与Kmeans的简单对比

    KNN与Kmeans感觉没啥联系,但是名字挺像的,就拿来一起总结一下吧. 初学者的总结. KNN是监督学习,Kmeans是无监督学习. KNN用于分类,Kmeans用于聚类. 先说KNN: 对于KNN ...

  2. 图示:DOM元素各种位置属性

  3. DDOS 攻击工具

    DDOS  攻击工具 使用github上的DDOS攻击工具 https://github.com/Ha3MrX/DDos-Attack 将python脚本拷贝到主机,使用 chmod +x ddos- ...

  4. visualvm监控jvm及远程jvm监控方法

    VisualVM是Sun的一个OpenJDK项目,其目的在于为Java应用创建一个整套的问题解决工具.它集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览H ...

  5. 【专题】区间dp

    1.[nyoj737]石子合并 传送门:点击打开链接 描述    有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这 ...

  6. 获取整个页面HTML的信息以及注意事项

    两种方式: 1.从每个节点获取 var a = '<!DOCTYPE html><html lang="zh-cn">'; var z = "&l ...

  7. canvas操作图片,进行面板画图,旋转等

    HTML5 <canvas> 标签用于绘制图像(通过脚本,通常是 JavaScript). 不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - 您必须使用 ...

  8. “一键”知道自己的IP地址和网络供应商

    打开浏览器,然后在地址栏里面输入“www.baidu.com” 进入百度主页以后,在搜索框内输入 “ip”,然后回车就可以了

  9. 【学习】Git和Github菜鸟入门

    Git 是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 目录(自己创建吧) 生成ssh密钥:ssh-keygen -t rsa -C "邮箱" ...

  10. [leetcode]_Interleaving String

    下午去蹭了一发新浪的笔试. 炒鸡多的网络基础知识,总共18道题,就写了8道左右吧,剩下的全是网络知识,这部分抽时间至少过一过. 其中一道算法题,回来跟嘟嘟商量,才发现是leetcode上的原题,连ex ...