惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
The Blog of Author Tim Ferriss
S
Securelist
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tor Project blog
S
Schneier on Security
Google DeepMind News
Google DeepMind News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
AWS News Blog
AWS News Blog
F
Fortinet All Blogs
C
Cisco Blogs
L
LangChain Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
T
The Exploit Database - CXSecurity.com
The GitHub Blog
The GitHub Blog
月光博客
月光博客
量子位
A
Arctic Wolf
博客园 - 叶小钗
L
LINUX DO - 热门话题
J
Java Code Geeks
The Hacker News
The Hacker News
Security Latest
Security Latest
V
Vulnerabilities – Threatpost
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
T
Tenable Blog
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
Simon Willison's Weblog
Simon Willison's Weblog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Threat Research - Cisco Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
PCI Perspectives
PCI Perspectives
Hacker News: Ask HN
Hacker News: Ask HN
P
Palo Alto Networks Blog
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
O
OpenAI News
P
Privacy International News Feed
P
Privacy & Cybersecurity Law Blog
N
Netflix TechBlog - Medium

博客园 - 古月春秋(刘云涛)

打车抬表费用图 vi的一点小经验 修正mysqlcc在MySQL 5.0上常报的 Table 'xxx' doesn't exist 错误 Perl中不寻常的 ?: 运算符 - 古月春秋(刘云涛) Ubuntu 5.10 下 Apache2 SSL 的配置方法 一行shell命令求素数 Boot FreeBSD from Windows boot loader Turtles - So Happy Together 关于IoC、低耦合、配置文件及其本质意义的思考 Perl与数据库 Perl无废话入门指南 W3C XSL Transformations (XSLT) Version 2.0 翻译计划 新版 apache_2.0.54 php-5.0.4 mysql-4.1.12a 组合安装向导(原创) Solaris 下安装Perl的DBD-mysql模块失败的原因以及解决办法 Why MSN Messenger ask me to verify email address all the time? SharpDevelop源码分析 (三、插件系统) SharpDevelop源码分析 (二、主程序+隐藏的初始化) SharpDevelop代码分析 (一、序+基本概念) 亚洲3S节目表
SharpDevelop的AddInTree View 插件
古月春秋(刘云涛) · 2004-10-15 · via 博客园 - 古月春秋(刘云涛)

自从SharpDevelop 源码分析的系列文章发出来之后,很多朋友给了不错的评价,在这里先感谢各位朋友的鼓励。另外,评论中有位朋友想看看我在文章中提到的AddInTreeView插件,其实这个是个很简单的小东西,因此单独发在这里了。(好像没有找到那里能上传文件,因此直接贴代码了)

AddinTreeViewCommand.cs

AddinTreeViewControl.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.Core.AddIns;
using ICSharpCode.Core.AddIns.Codons;

namespace Addins.AddinTreeView
{
    
/// <summary>
    
/// AddinTreeViewControl 的摘要说明。
    
/// </summary>

    public class AddinTreeViewControl : System.Windows.Forms.UserControl
    
{
        
private System.Windows.Forms.ColumnHeader chName;
        
private System.Windows.Forms.ListView lvAddin;
        
private System.Windows.Forms.ColumnHeader chInfo;
        
private System.Windows.Forms.CheckBox cbShowAddinInfo;
        
private System.Windows.Forms.Splitter splitter2;
        
private System.Windows.Forms.ListView lvDebug;
        
private System.Windows.Forms.Splitter splitter1;
        
private System.Windows.Forms.TreeView tvAddin;
        
private System.Windows.Forms.ColumnHeader chValue;
        
/// <summary> 
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public AddinTreeViewControl()
        
{
            
// 该调用是 Windows.Forms 窗体设计器所必需的。
            InitializeComponent();

            
// TODO: 在 InitializeComponent 调用后添加任何初始化
            InitAddinTreeView();
        }


        
/// <summary> 
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
{
            
if( disposing )
            
{
                
if(components != null)
                
{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        
组件设计器生成的代码


        
void InitAddinTreeView()
        
{
            TreeNode pathNode 
= tvAddin.Nodes.Add("AddinRoot");
            
            tvAddin.BeginUpdate();
            
try
            
{
                
foreach ( AddIn addIn in AddInTreeSingleton.AddInTree.AddIns)
                
{
                    
foreach ( ICSharpCode.Core.AddIns.AddIn.Extension e in addIn.Extensions)
                    
{
                        
string [] paths = e.Path.Split('/');
                        pathNode 
= tvAddin.Nodes[0];
                        
                        
for ( int i=0; i<paths.Length; i++)
                        
{    
                            
bool foundPath = false;
                            
                            
if ( paths[i] == "" ) 
                            
{
                                pathNode 
= tvAddin.Nodes[0];
                                
continue;
                            }
                        
                                    
                            
for ( int j=0; j<pathNode.Nodes.Count; j++)
                            
{
                                
if ( pathNode.Nodes[j].Text == paths[i] )
                                
{
                                    pathNode 
= pathNode.Nodes[j];
                                    foundPath 
= true;
                                    
break;
                                }

                            }

                            
                            
if ( !foundPath )
                            
{
                                pathNode 
= pathNode.Nodes.Add( paths[i] );
                                pathNode.Tag 
= new ArrayList();
                                
//lvDebug.Items.Add("Add " + e.Path + " ---- " + paths[i]);
                            }

                        }

                        
                        (pathNode.Tag 
as ArrayList).Add(e);
                    }

                }

            }

            
finally
            
{
                tvAddin.EndUpdate();
            }

        }


        
void AddInfo(string Name, string Value)
        
{
            lvAddin.Items.Add(Name).SubItems.Add(Value);
        }


        
private void tvAddin_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        
{
            lvAddin.Items.Clear();
            
            
if ( e.Node.Tag != null )
            
{
                
foreach (AddIn.Extension et in (e.Node.Tag as ArrayList))
                
{
                    AddInfo(
"Extension", et.ToString());

                    
foreach ( ICodon codon in et.CodonCollection)
                    
{
                        AddInfo(
"  ┏ Codon ID", codon.ID);
                        AddInfo(
"  ┣ Codon Name", codon.Name);
                        AddInfo(
"  ┗ Codon Class", codon.Class);
                        
                        
if ( cbShowAddinInfo.Checked )
                        
{
                            AddInfo(
"      ┣ Addin Name", codon.AddIn.Name);
                            AddInfo(
"      ┗ Addin FileName", codon.AddIn.FileName);
                        
                            
foreach ( ICSharpCode.Core.AddIns.AddIn.Extension ex in codon.AddIn.Extensions)
                            
{
                                AddInfo(
"          ┣ Addin Extensions", ex.Path);
                            }

                            AddInfo(
"          ┗━━━━━━━━━""");
                        }

                    }

                }

            }

        }

    }

}