您的位置:首页 > 运维架构

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

2007-07-26 16:13 190 查看
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" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: