开发环境基于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. mysql中删除完全重复数据的准确SQL语句

    删除数据库中重复的记录,只保留一条 DELETE FROM tb_gps_records WHERE id NOT IN (SELECT bid FROM (SELECT min(id) as bid ...

  2. Linux常用的50个命令

    50个最常用的Unix/Linux命令 2014-08-20 这篇文章翻译自http://www.thegeekstuff.com/2010/11/50-linux-commands/这些都是一些很常 ...

  3. 一般处理程序ashx中用session存储数据

    如果要使用session的话,在handler的代码中添加System.Web.SessionState的引用,并让这个handler继承IRequiresSessionState接口,一定要继承这个 ...

  4. 卡尔曼滤波——基本假设(1)线性系统(2)高斯分布 根据x(t) 求解x(t+1)

    from:https://blog.csdn.net/u010720661/article/details/63253509 原文链接:http://www.bzarg.com/p/how-a-kal ...

  5. 012——VUE中todos示例讲解class中应用表达式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. ControllerDescriptor的认识

    ControllerDescriptor类主要包含了对ASP.NET MVC中的Control的元数据的解析,在MVC的Model绑定以及数据处理过程中经常会遇到ControllerDescripto ...

  7. Android的方法和属性(2)

    1.RadioButton(单选按钮) 嵌入到RsdioGroup中实现单选效果 android:checkedButton="radio的id值" int getCheckedR ...

  8. Android 进阶7:进程通信之 AIDL 的使用

    读完本文你将了解: AIDL 是什么 AIDL 支持的数据类型 AIDL 如何编写 AIDL 实例 创建 AIDL 编写服务端代码 编写客户端代码 运行结果 总结 代码地址 Thanks 记得 201 ...

  9. poj1655(dfs,树形dp,树的重心)

    这是找树的重心的经典题目. 树的重心有下面几条常见性质: 定义1:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心.定义2:以这个点为根,那么所有的子树(不算整个树自身)的大 ...

  10. fedora to ubunto

    Fedora to Ubuntu16.04 一.删除Fedora 由于双系统启动的时候是由linux系统做引导启动,所以在Windows下直接格式化Linux分区将导致无法启动Windows.解决办法 ...