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

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

 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

}

第二,做与这个文件类型对应的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(11);

        _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"   />
相关文章
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
271 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
663 219
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
353 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1588 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
897 61
|
7天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
295 140