zoukankan      html  css  js  c++  java
  • 【转载】SharpDevelop开发教程

    【原文地址】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接口。因为添加菜单项和添加工具条按钮比较简单,在以后的内容中我会一起讲,在此我就不多说了。

  • 相关阅读:
    SpringMVC 工作流程
    zookeeper
    Zookeeper
    HashMap
    Shiro learning
    Shiro learning
    Shiro learning
    Easy Poi入门
    Enum枚举学习- java5之前和之后的写法
    linux命令行todo列表管理工具Taskwarrior介绍
  • 原文地址:https://www.cnblogs.com/sea_peak/p/2012409.html
Copyright © 2011-2022 走看看