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

推荐订阅源

N
Netflix TechBlog - Medium
N
News and Events Feed by Topic
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
The Hacker News
The Hacker News
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
Cisco Talos Blog
Cisco Talos Blog
Hacker News: Ask HN
Hacker News: Ask HN
Simon Willison's Weblog
Simon Willison's Weblog
W
WeLiveSecurity
H
Hacker News: Front Page
L
LINUX DO - 热门话题
T
Tor Project blog
N
News | PayPal Newsroom
S
Secure Thoughts
小众软件
小众软件
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
AWS News Blog
AWS News Blog
Security Latest
Security Latest
MyScale Blog
MyScale Blog
Webroot Blog
Webroot Blog
Cyberwarzone
Cyberwarzone
Engineering at Meta
Engineering at Meta
腾讯CDC
T
Tailwind CSS Blog
SecWiki News
SecWiki News
博客园 - 司徒正美
Microsoft Azure Blog
Microsoft Azure Blog
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog RSS Feed
大猫的无限游戏
大猫的无限游戏
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Martin Fowler
Martin Fowler
P
Proofpoint News Feed
GbyAI
GbyAI
C
Check Point Blog
博客园_首页
PCI Perspectives
PCI Perspectives
月光博客
月光博客
TaoSecurity Blog
TaoSecurity Blog
aimingoo的专栏
aimingoo的专栏
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家

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

打车抬表费用图 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(
"          ┗━━━━━━━━━""");
                        }

                    }

                }

            }

        }

    }

}