一步一步掌握sharpdevelop4,创建自己的pad,和自己的view

 SD中pad和view是比较的难以掌握的一个部分,因为其中的调用关系比较复杂,我没有直接去看代码,而是借用了
http://www.cnblogs.com/michael-zhang/articles/629724.html
中demo的一个部分,下边我就来说一个,这个如何使用sd做一个自己的pad和view

这个demo把系统中的代码给简化了一部分,看起来,分析起来比较直观

我们看到的是一个主窗口是workbench,它带有一个菜单,一个工具栏,两个pad,一个contentview,
workbench实现了一个iworkbech的接口

从图上我们可以看到,其中一个是打开的文件,文件名是我写死到代码里边的
从我们发出打开一个文件的指令到,文件呈现在我们面前,这个过程依次是:

btn发出打开一个文件的命令,调用->FileService,
FileService必须为这个文件创建一个ViewContent并加入workbench的ViewCollection的集合中

怎么找到与这个文件对应的ViewContent,
FileService调用DisplayBindingService,从这里找到能打开这个文件并能创建视图的一个IDisplayBinding

 

public interface IDisplayBinding
...{
    /**//// <remarks>
    /// This function determines, if this display binding is able to create
    /// an IViewContent for the file given by fileName.
    /// </remarks>
    /// <returns>
    /// true, if this display binding is able to create
    /// an IViewContent for the file given by fileName.
    /// false otherwise
    /// </returns>
    bool CanCreateContentForFile(string fileName);

    /**//// <remarks>
    /// Creates a new IViewContent object for the file fileName
    /// </remarks>
    /// <returns>
    /// A newly created IViewContent object.
    /// </returns>
    IViewContent CreateContentForFile(string fileName);
}

DisplayBindingService:从DisplayBindingDescriptor的集合中找到能打开这个文件的的IDisplayBinding
返回 IDisplayBinding,后,由FileService调用IDisplayBinding.CreateContentForFile方法创建视图,返回一个IViewContent

那么了解了这些,我们就做一个自己的binding了,和自己的Service就比较简单了
第一步,做一个实现了IDisplayBinding的类,指出我们可以打开的文件类型

 

public class HouseManDisplayBinding : IDisplayBinding
...{
    IDisplayBinding Members#region IDisplayBinding Members

    public bool CanCreateContentForFile(string fileName)
    ...{
        fileName = fileName.ToLower();
        return fileName.EndsWith(".con");
    }

    public IViewContent CreateContentForFile(string fileName)
    ...{
        ConDisplayBindingWrapper imgDisplay = new ConDisplayBindingWrapper();
        imgDisplay.Load(fileName);
        return imgDisplay;
    }

    #endregion

}

第二,做与这个文件类型对应的IViewContent

 

 public abstract class AbstractViewContent : IViewContent...{//......}

public class ConDisplayBindingWrapper : AbstractViewContent
...{

    Panel _panel;

    public override Control Control
    ...{
        get
        ...{
            return _panel;
        }
    }


    public override void Load(string fileName)
    ...{
        Control con=new HouseCon();//一个基于usercontrol做的一个非常简单的一小控件
        con.Location = new Point(1, 1);

        _panel = new Panel();
        _panel.AutoScroll = true;
        _panel.Dock = DockStyle.Fill;
        _panel.TabIndex = 1;
        _panel.Controls.Add(con);

        TitleName = System.IO.Path.GetFileName("控件");
    }

    public override void Dispose()
    ...{
        _panel.Controls.Clear();
        _panel = null;
    }
}第三步,在程序的addin文件中加入这个binding就可以了

 

 

<DisplayBinding id    =     "Control"
                        insertbefore = "Text"
                        supportedformats = "控件"
                        class = "SharpGui.ViewContent.HouseManDisplayBinding" />

时间: 2024-08-03 20:40:22

一步一步掌握sharpdevelop4,创建自己的pad,和自己的view的相关文章

一步一步用Visual C#创建Web服务

visual|web|web服务|创建 引言: 微软在其.Net战略中,对其主推的Web服务做了大肆的宣扬.现在,Web服务正如火如荼地发展着,相关的各项新技术层出不穷.Web服务的发展正构筑着互联网时代美好的明天.在本文中,我将向大家介绍Web服务的一些基本知识以及如何用Visual C#一步一步地创建一个简单的Web服务. 一.Web服务概述: Web服务是一种新的Web应用程序分支,它们是自包含.自描述.模块化的应用,可以发布.定位.通过Web调用.Web服务可以执行从简单的请求到复杂商务

一步一步写算法(之图创建)

原文:一步一步写算法(之图创建) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     前面我们讨论过图的基本结构是什么样的.它可以是矩阵类型的.数组类型的,当然也可以使指针类型的.当然,就我个人而言,比较习惯使用的结构还是链表指针类型的.本质上,一幅图就是由很多节点构成的,每一个节点上面有很多的分支,仅此而已.为此,我们又对原来的结构做了小的改变: typedef struct _LINE { int end; int weight;

一步一步学Silverlight :创建一个基本的Silverlight应用

概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON.Web Service.WCF以及Sockets的支持等一系列新的特性.<一步一步学Silverlight 2系列>文章带您快速进入Silverlight 2开发. 本文为系列第一篇创建一个基本的Silverlight 2应用,不能免俗,从最简单的Hello W

一步一步用JBuilder4开发EJB(转自china-pub)

一步一步用JBuilder4开发EJB 作者:廖家序 发布时间:2001/02/07 文章摘要: 本文提供一个步骤,通过简单的例子介绍怎样在JBuilder4的集成开发环境下开发EJB.这些步骤都很简单,对于了解EJB体系结构和一般的编程规则的人很容易理解.目的是为了能够让大家掌握在JBuilder4下开发分布式的多层应用系统的简单.快速的方法,达到举一反三的效果.          正文: 一步一步用JBuilder4开发EJB 一. 简介 Enterprise Java Beans(EJB)

一步一步SharePoint 2007之二十六:编写一个带事件的WebPart

摘要 前面的文章中,我们编写了一个非常简单的WebPart,它只能输出一个Hello World!的字符串. 很显然,这种WebPart根本就没有什么实际的作用.有没有办法编写比较复杂一些的,比如是带事件的 WebPart呢? 本篇文章将介绍如何编写一个带事件的WebPart. 正文 要实现带事件的WebPart,实际上就是要实现有复合控件的WebPart,这在开发过程中具有非常的的实 际意义.如果我们能够做到这点,那么,其它的什么样的WebPart,相信大家都能举一反三的做到. 这里,我就用一

一步一步SEO 之 准备工作

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 写在前面的话 SEO ,对大多人来说是个有意思的话题,不过似乎只要和搜索引擎沾边的话题都是有意思的,谁让现在搜索引擎火那.对于绝大多数中小网站管理者来说,想推广,就想到 SEO , SEO 似乎是一道神秘的灵符,只要用上它,可以保证我们的网站一夜之间流量直线上升,其实这是错误的遐想.本文作者结合其自身站点的一些经验,以及借鉴网上的一些成功经验,逐步揭开 SEO 的神秘面

【机房重构】一步一步往上爬——不仅仅是三层

不知道大家还记不记得之前学习的UML中一个单独列出来的一种图,也就是这次我想说的包图.那个时候,让我们画机房收费系统的各种图,用例图.类图等等,通过自己反复琢磨,还都勉勉强强画出来了.唯独只有包图,我是一点东西也没有画上,只是见到了传说中的"包"是长什么样子的. 现在到了机房重构的阶段了,之前也学习了三层,终于是知道了包图该怎么画了.但也不仅仅是理解了包图,而且也是见证到了包图是如何在一步一步层层升级的.下面就将用一个机房系统中的登录实例来看看为什么说<不仅仅是三层>. 三

走近科学:如何一步一步解码复杂的恶意软件

写在前面的话 在检测网站安全性的过程中,最麻烦的一部分工作就是要确保我们能够找出网站中所有已存在的后门.绝大多数情况下,攻击者会在网站各种不同的地方注入恶意代码,并以此来增加再次感染该网站的成功率以及尽可能久地实现持续感染. 虽然我们之前已经给大家介绍过数百种后门以及相应的影响,但今天我们想跟大家更加深入地讨论一些关于恶意软件的分析技术,即如何解码复杂的高级恶意软件. 本文所分析的恶意软件感染样例早在几个月前就已经出现了,但是受这种恶意软件变种所感染的网站(例如WordPress和Joomla等

一步一步学习SignalR进行实时通信_5_Hub

原文:一步一步学习SignalR进行实时通信_5_Hub 一步一步学习SignalR进行实时通信\_5_Hub SignalR 一步一步学习SignalR进行实时通信_5_Hub 前言 Hub命名规则 Hub封装好的常用方法 Hub常用方法解释 保持状态 前后台交互 结束语 参考文献 前言 上一讲,我们简单的介绍了下Hub的配置以及实现方法,这一将我希望把更多的细节梳理清楚,不至于让大家在细节上面摸不着头脑,理解深了,那么做项目自然就会相对轻松一些. Hub命名规则 Hub与Persistent