【原文地址】http://www.cnblogs.com/cbuilder/archive/2005/08/06/209046.html

前 言

最近在网上有很多关于SharpDevelop代码分析的文章,但对SharpDevelop插件和核心服务开发的文章确很少。这份文档我想应该会对大家有帮助。为了不浪费大家的时间和网络流量,我不打算给大家讲SharpDevelop的基本概念和内部的代码分析。各位可以参阅清华大学出版的一本红皮书《C#软件项目开发全程剖析-全面透视SharpDevelop软件的开发内幕》(我真的不是清华的书托J),虽然翻译的一般、但有总比没有的好,各位也可以参阅博客园(www.cnblogs.com)另外几位的文章,其中古月春秋的《SharpDevelop代码分析》系列是个人认为写的很不错的,很见作者的功底。(题外话:古月春秋的文章中提到了对codon的翻译的问题,英文中电子、中子、光子、质子分别译为electron、 neutron、photon、proton,此处大家会对-on后缀发出会心的微笑。Codon翻译成“代码子”意思应该是很到位的,清华那本书中的“密码子”就逊色些了,但也还将就。)

这文章大家可以任意阅读转载,但请保持文档的完整转载。由于在工作的中午休息期间所写,十分匆忙,难免有勿,请各位斧正。

为了方便起见,我在文章中都把SharpDevelop简称为SD。

第一章    Pad

Pad(面板)就是SD中的停靠窗口。有这些特点:Pad不能关闭,但可以隐藏或显示。每种类型的Pad只能打开一个,不能在运行时添加,标题唯一。可以显示图标,由SD中的布局管理器负责管理。通常不显示文件内容,而是辅助用户完成任务。

下面进入我们的实战流程,先新建一个类库型的项目,命名为CSPadDemoPlug,把Class1.cs改名为Main.cs,修改为如下内容:

1using System;
 2using System.Drawing;
 3using System.Windows.Forms;
 4
 5using ICSharpCode.SharpDevelop.Gui;
 6
 7namespace SDPadDemoPlug
 8{
 9    public class SDPad : AbstractPadContent
10    {
11        SDPadControl control=new SDPadControl();
12        public SDPad(): base("TestPanel")
13        {
14        }
15
16        public override Control Control 
17        {
18            get 
19            {
20                return this.control;
21            }
22        }        
23
24    }
25}
26

记得要在项目中加入SD中的ICSharpCode.Core.dll和SharpDevelop.Base.dll引用。这两个文件在SD下的Bin目录下。写SD的插件需要包含。

在项目中添加新建项à用户控件。改名为CSPadControl。各位可以在CSPadControl上添加一些相关的内容。

在工程中添加一个DemoPlug.addin文件,这是插件配置文件,很重要,内容如下:

<AddIn name        = "SharpDevelop Plug Demo"
       author      = "SongYuanWu"
       copyright   = "GPL"
       url         = "http://www.cnblogs.com/CBuilder"
       description = "SharpDevelop "
       version     = "1.0.0">
    
    <Runtime>
        <Import assembly="SDPadDemo.dll"/>
    </Runtime>

<Extension path = "/SharpDevelop/Workbench/Views">
        <Class id    = "SDPadDemo" 
              class = "SDPadDemoPlug.SDPad"/>
    </Extension>
</AddIn>

OK!把编译后的SDPadDemo.dll和DemoPlug.addin文件拷贝到SD的\AddIns\目录下,运行SD就可以看到我们创建的Pad了(如下图),同时在SD的菜单【查看】-【工具】下也出现了TestPanel菜单项。

如果需要指定pad的图标时,可以改更改base("TestPanel")为 base("TestPanel", "IconID")。

InconID为图标的资源号,作为演示你可以用Class的图标“Icons.16x16.Class”来替代。

要点分析:

制作Pad的时候要从AbstractPadContent继承。所以要using ICSharpCode.SharpDevelop.Gui;

.addin文件中不要用中文,否则会出现错误,那如果需要用到中文怎么办呢?可以使用SD的字符串分析服务,把字符串改为如下形式${res:StringID},StringID是SD中的资源ID,SD的ResourceService的使用,我将会在后面的内容中讲述。

第二章    View

View(视图)是SD的基础部分,View通常包含编辑器,如代码编辑器,资源编辑器。基本上,它是显示于MPI窗口选项卡页面上的面板。

制作View要从AbstractViewContent继承下来。下面就进入我们的实战操作流程,首先新建一个类库行的项目,SDViewDemoPlug,把Class1.cs改名为Main.cs,修改为如下内容:

1using System;
 2using ICSharpCode.Core.AddIns;
 3using ICSharpCode.Core.AddIns.Codons;
 4
 5using ICSharpCode.SharpDevelop.Gui;
 6
 7namespace SDViewDemoPlug
 8{
 9    public class ShowViewCommand : AbstractMenuCommand
10    {
11        public override void Run()
12        {            
13            WorkbenchSingleton.Workbench.ShowView(new SDViewContent());
14        }
15    }
16}

添加一个新类,SDViewContent,文件名为SDViewContent.cs,修改内容如下:

1using System;
 2using System.Drawing;
 3using System.Windows.Forms;
 4using ICSharpCode.SharpDevelop.Gui;
 5
 6namespace SDViewDemoPlug
 7{
 8    public class SDViewContent : AbstractViewContent
 9    {
10        SDViewControl p=new SDViewControl();
11        public override Control Control 
12        {
13            get {return p;}
14        }
15        
16        public override bool IsReadOnly 
17        {
18            get {return false;}
19        }
20        
21        public override void Save(string fileName){}
22        public override void Load(string fileName){}
23        public override void RedrawContent(){}
24        
25        public override void Dispose()
26        {        
27            p.Dispose();
28        }
29        
30        public SDViewContent()
31        {
32            TitleName = "TestView";            
33        }        
34        
35    }
36}
37

在项目中添加新建项à用户控件。改名为SDViewControl。各位可以在SDViewControl上添加一些相关的内容。最后添加插件配置文件ViewDemoPlug.addin,内容如下:

<AddIn name        = "SharpDevelop Plug Demo"
       author      = "SongYuanWu"
       copyright   = "GPL"
       url         = "http://www.cnblogs.com/CBuilder"
       description = "SharpDevelop"
       version     = "1.0.0">
    
    <Runtime>
        <Import assembly="SDViewDemoPlug.dll"/>
    </Runtime>

<Extension path = "/SharpDevelop/Workbench/MainMenu/Tools">
        <MenuItem id = "SDViewDemo"                 
                 label = "ShowMyView" 
                 class = "SDViewDemoPlug.ShowViewCommand"/>
    </Extension>
</AddIn>

还有不要忘记把ICSharpCode.Core.dll和SharpDevelop.Base.dll引用进项目中来。编译后把ViewDemoPlug.addin和SDViewDemoPlug.dll拷贝到SD的\AddIns\目录下。运行SD,就可以看到在【工具】菜单下出现了【ShowMyView】菜单项。Click【ShowMyView】菜单项后显示如图,再click【ShowMyView】菜单项后就会又显示一个TestView。各位如果问:“需要做象“启动页”一样的View,如果已经有打开的了就会激活打开的View该如何处理呢?”。其实很简单,你可以把ShowViewCommand类中的Run函数更改为:

foreach (IViewContent view in WorkbenchSingleton.Workbench.ViewContentCollection) 
    {
        if (view is SDViewContent) 
        {
            view.WorkbenchWindow.SelectWindow();                    
            return;
        }
    }            
    WorkbenchSingleton.Workbench.ShowView(new SDViewContent());

此Demo演示了如何在SD添加一个View,同时也演示了如何在SD中更改菜单项。每添加一个菜单项时都要继承一个AbstractMenuCommand,并且改写Run()函数,当然你的XXXCommand也可以从SD的AbstractCommand继承,但要实现IMenuCommand接口。因为添加菜单项和添加工具条按钮比较简单,在以后的内容中我会一起讲,在此我就不多说了。

转载于:https://www.cnblogs.com/sea_peak/archive/2011/04/11/2012409.html

【转载】SharpDevelop开发教程相关推荐

  1. SharpDevelop开发教程(一)

    前 言 最近在网上有很多关于SharpDevelop代码分析的文章,但对SharpDevelop插件和核心服务开发的文章确很少.这份文档我想应该会对大家有帮助.为了不浪费大家的时间和网络流量,我不打算 ...

  2. 转载收藏之用 - 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

  3. [转载]Python量化交易平台开发教程系列0-引言

    原文出处:http://vnpy.org/2015/03/04/20150304_Python%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93%E5%B9%B3%E5%8F%B ...

  4. android studio的GearVR应用开发(二)、一个简单的VR app(Oculus官方GearVR开发教程,翻译转载)

    声明:本文是Oculus官方的GearVR开发教程,为本人翻译转载,供广大VR开发爱好者一同学习进步使用. 原文章 一个简单的VR app 概观 在搭建好GearVR框架后,让我们一起来创建第一个VR ...

  5. 微信公众帐号开发教程第13篇-图文消息全攻略 -- 转载

    引言及内容概要 已经有几位读者抱怨"柳峰只用到文本消息作为示例,从来不提图文消息,都不知道图文消息该如何使用",好吧,我错了,原本以为把基础API封装完.框架搭建好,再给出一个文本 ...

  6. Android WiFi开发教程(三)——WiFi热点数据传输

    在上一篇文章中介绍了WiFi的搜索和连接,如果你还没阅读过,建议先阅读上一篇Android WiFi开发教程(二)--WiFi的搜索和连接.本篇接着简单介绍手机上如何通过WiFi热点进行数据传输. 跟 ...

  7. .Net魔法堂:史上最全的ActiveX开发教程——发布篇

    一. 前言 接着上一篇<.Net魔法堂:史上最全的ActiveX开发教程--开发篇>,本篇讲述如何发布我们的ActiveX. 二.废话少讲,马上看步骤! 1. 打包  C#开发的Activ ...

  8. 《C# WinForM 实践开发教程》案例×××(2)

    <C# WinForM 实践开发教程>案例×××(2): 由于上传限制,必须分卷压缩,请依次下载后解压缩.共有20个文件,合计71.3M. 请耐心下载哦^o^ 转载于:https://bl ...

  9. C#开发教程初级-第一天-hello Word 控制台编程

    为什么80%的码农都做不了架构师?>>>    C#开发教程第一天,hello word的编程! using System; using System.Collections.Gen ...

最新文章

  1. 全栈Python Flask教程-建立社交网络
  2. Spring基础专题——第八章(事务)
  3. Python_管理项目
  4. 清理 zabbix 历史数据, 缩减 mysql 空间
  5. 人脸识别大规模爆发!
  6. Python网络编程(OSI模型、网络协议、TCP)
  7. “希希敬敬对”团队作业——敏捷冲刺5
  8. AutoLISP 绘制表情图案
  9. 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署
  10. FMS 中文帮助 (下载)
  11. js 高级-创建对象
  12. 侯捷 - C++ Startup 揭密:C++ 程序的生前和死后 (二)
  13. 『杭电1726』God’s cutter
  14. C语言提取字符对应的ASCAl,ascall码对照表(ASCII码表)
  15. JavaSE基础 打印杨辉三角
  16. ubuntu下git使用Beyond Compare来做diff和merge方法
  17. 赵承熙获美国人宽恕,马加爵呢
  18. 计算机与计算机网络_让计算机承担责任
  19. 新一代DirectX10前瞻
  20. git时出现! [rejected] master -> master (non-fast-forward)解决方法

热门文章

  1. 【模拟IC】运算放大器设计指标简析之直流特性
  2. redis再战之AKF的Z轴拆分和代理集群搭建《八》
  3. 桁架机器人立柱_弗迈斯桁架上下料机器人的结构设计?
  4. JS教程()js弹出小窗口(没有浏览器窗口地址栏,工具栏,菜单栏,显示栏,只有关闭和最小化按钮)
  5. 简介ImageLoader(一)
  6. linux电视软件如何安装程序,在ubuntu 7.04中安装影视制作软件jahshaka
  7. 使用pywinrm远程控制windows系统
  8. 物联网毕业设计 NBIOT远程通信系统
  9. 3DGIS第六章 北京奥林匹克公园三维场景网络发布应用
  10. 车队车载调频广播电台移动发射系统的设计与应用