2007年8月30日星期四

第四章 如何使用UIExtensionSites

UIExtensionSite菜单项(MenuItem)菜单工具栏(Menu strips)按钮按钮工具栏(Toolbar Strips)下面的篇幅中,将要介绍如何使用UIExtensionSite: 步骤:

添加一个UIExtensionSite

  • 注册UIExtensionSite
  • 添加一个界面元素到UIExtensionSite中
  • 绑定到一个Command
  • 书写Command处理函数
  • 一、添加一个UIExtensionSite

    在这个例子中,我们添加一个ToolbarStrips类型的UIExtensionSite。打开ShellLayoutView或ShellForm(取决于是否在创建SmartClient工程的时候创建Layout项目),在Toolbox中选中ToolStrip,添加到Designer中,打开属性,在Dock中选中Top,修改Name为“ButtonsBar”。

    在Infrastructure.Interface项目中,打开Constants.UIExtensionSiteNames类,添加如下代码:

    public const string ButtonsBar="ButtonsBar"

    将ButtonsBar的名字定义为常量,在UIExtensionSiteNames中,所有的常量必须唯一。在SmartClient中,是以名字作为一个UIExtensionSite唯一标识的。

    二、注册UIExtensionSite

    下面的代码用来注册一个UIExtensionSite

    WorkItem.UIExtensionSites.RegisteSite(UIExtensionSiteNames.ButtonsBar, this.View.ButtonsBar);

    可以将上述代码加到ShellLayoutViewPresenter类的OnViewSet()方法中或加到ShellApplication类的Run方法中(取决于是否在创建SmartClient工程的时候创建Layout项目)。

    三、添加一个界面元素到UIExtensionSite中

    打开ModuleController.cs,在ExtendToolStrip方法中将一个定义好的按钮加入先前定义好的ButtonsBar中。

    ToolStripButton element = new ToolStripButton()

    //add code here to inital element.

    WorkItem.UIExtensionSites[Constants.UIExtensionSiteNames.ButtonsBar].Add(new ToolStripButton());

    到目前为止,我们已经将一个按钮加到一个UIExtensionSite中,下一步我们将介绍如何使加入的按钮响应鼠标点击事件,并调用相应的方法。

    四、将鼠标响应事件绑定到一个Command

    在CAB中,我们可以使用Command模式来实现事件响应,打开新建模块的Constants.CommandNames类,在该类中,将该按钮鼠标响应事件命令名定义为一个常量:

    public const string TestButtonClick= "TestButtonClick";

    在ModuleController类中的ExtendToolStrip方法中,加入如下代码:

    WorkItem.Commands[Constants.CommandNames.TestButtonClick].AddInvoker(element, "Click");

    下面我们将介绍如何将Command绑定到一个方法

    五、书写Command处理函数

    在CAB中,我们使用AOP来实现Command方法绑定

    [CommandHandler(CommandNames.TestButtonClick)]
    public void OnTestButtonClick(object sender, EventArgs e)
    {
         MessageBox.Show("Successful");
    }

    CommandHandler是CAB中预订义的Attribute,用来申明事件处理方法。

    后续:

    当我们将模块相关的界面元素加到UIExtensionSite中时,如果每个模块自己添加的话,这要求每个模块开发人员需要了解Infrastructure模块的一些细节设计和实现,这对于一个大型应用开发来说是降低效率的,同时也会有很多的冗余代码。因此,我们可以将Infrastructure中的实现细节进行封装,以接口的形式暴露给各个模块,这样业务模块开发人员可以只关心自己本身的业务需求开发,而不用关心基础模块的具体实现,也减少出错的可能。

    第三章 创建业务模块

    • 在一个目录下(一般Source),点击鼠标右键,选择Smart Client Factory -> Add Business Module
    • 输入模块名字,确定。
    • 一个新的界面弹出,在该界面中,可以决定是否选中“Create an interface library for this module”。如果选中该选项,在创建业务模块的时候,会创建一个Module.Interface项目。
    • 点击“Finish”,完成业务模块的创建。
    • 创建完成后,在该业务模块项目中会生成如下几个目录:
      • Constants - 该目录包含四个类,分别是CommandNames, EventTopicNames, UIExtensionSiteNames, 和WorkspaceNames. 这四个类分别继承了Infrastructure模块中相对应的类。
      • Services
      • Views
    • 同时在ProfileCatalog.xml文件中加入如下配置。
      • <Modules>
              <ModuleInfo AssemblyFile="Module2.dll" />
            </Modules>
    • 创建向导会生成两个类,Module.cs和ModuleController.cs
    • 在ModuleController.cs中,向导自动添加了如下方法:
      • AddServices - 添加模块实现的服务
      • AddViews - 添加视图
      • ExtendMenu - 添加菜单选项
      • ExtendToolStrip - 添加快捷按钮

    Module和ModuleController的详细设计参考后续文档。

    第二章 创建SmartClient项目工程

    • Menu->file->new->project
    • 展开Guidance packages,选择smart client development
    • 输入项目名及目录,点击ok

    • 选择CAB编译好的DLL目录

            Microsoft.Practices.CompositeUI.dll

            Microsoft.Practices.CompositeUI.WinForms.dll

              Microsoft.Practices.ObjectBuilder.dll

    每个Smart Client 项目都需要上述的三个CAB dll文件。

    • 选择Enterprise Library DLL目录

    Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll

    Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll

    Microsoft.Practices.EnterpriseLibrary.Logging.dll

    Microsoft.Practices.EnterpriseLibrary.Common.dll

    Smart Client application use these dlls in Enterprise Library to handle Exception and Logging.

    • 输入该项目的“根命名空间 namespace”
    • 选中第一选项可以决定是否创建一个独立项目来定义Shell的layout

    • 点击Finish
    • 此时,Smart Client 项目创建成功。

    第一章 .Net CAB&SCSF 开发包的安装

    第一步:安装Visual Studio 2005 for C#

    第二步:安装Guidance Automation Extensions - June 2006

    第三步:安装Guidance Automation Toolkit - June 2006

    第四步:安装Enterprise Library for .NET 2.0

    第五步:安装CAB 1.0

    安装完毕,用VSS2005打开Composite项目,编译Source。

    第六步:安装SCSF - June 2006

    选择CAB编译后DLL目录

    2007年4月23日星期一

    如何对待抑郁 (转至百度知道)

    1. 指定一个切合实际的想法,花的精力少,时间少的.每实现一个目标你回增加自信,这样你每天生活在成功中,生活的乐趣会逐渐体现出来,你会快乐很多.

    2. 持正常活动,千万不能懒,不能因为这样那样的原因打乱自己正常的生活习惯.
    3. 充分肯定自己,要找一个一无事处的人和找一个全能的人一样困难,每个人都有自
      己的长处.
    4. 不谈不说不听不涉及关于抑郁的事情.每天都要开开心心的.不要因为这样那样的事使得自己不开心.
    5. 让自己充实忙碌起来.约朋友吃饭聊天,花更
      多的时间在兴趣爱好方面用健康快乐的内容充满大脑,哪还有悲伤的余地?
    6. 要鼓励自己.常常微笑,开心的笑,久而久之会感觉快乐也多了些.
    7. 善待自己.自己
      把自己当作宝贝来疼惜.让自己过得好,制造幸福感,甜蜜的时候不大容易想起悲苦,相反把自己搞得颓废可怜兮兮,只会增加悲凉的气氛.




    Powered by ScribeFire.

    你为什么不快乐 (转自钱江晚报)

    前几天,好朋友相邀“聚聚”,欣然前往。席间,大家海阔天空,家长里短,倒也其乐融融。然其中一位朋友却郁郁寡欢,默默地饮酒。我知道,这位朋友近几年事
    业、家庭各方面都比较顺,不久前,孩子又考进了外地一所重点大学,在常人眼中是喜事连连。可他却说高兴不起来,工作上、家庭里烦心的事很多。比如,孩子在
    外地总是不放心,生怕他学习上不努力,学坏样等等。





      我知道,这位朋友的思维是进入了一个死角。他看问题的视角是负面、消极的。尽管在旁人眼中,他处在幸福之中,可他感觉不到幸福,却为一些并不存在的事
    忧愁,被种种的可怕念头纠缠。我说,老兄,船到桥门自会直,车到山前必有路,孩子的事,就让孩子自己去解决,不要太跟自己过不去。





      于是,我想到了这样一个问题:人为什么会不快乐?为什么有些人尽管身处逆境,却整天乐呵呵?有些人事事顺意,却仍然郁郁寡欢?说到底是一个思想意识问
    题。弥尔顿在《失乐园》中有一句话:“意识本身可以把地狱造就成天堂,也能把天堂折腾成地狱。”我认为是比较直观地讲出了其中的道理。我们每个人的烦恼和
    痛苦都不是因为事情的本身,而是我们看问题的观念和态度。这位朋友就是因为观念比较悲观,结果无形之中给自己增加了许多的压力,把天堂折腾成了地狱。





      在生活中经常不快乐的人,一种是思想比较狭隘。这种人,一件小事往往看得很大,很严重。一种是思想比较敏感,明明是在说别人,他却认为是在影射他,神
    经过敏,疑神疑鬼,心里不痛快。还有一种是思想悲观。一事当前,总是如履薄冰,如临深渊。在困难中看不到希望,在胜利时又时时担心出问题。“人生不满百,
    常怀千岁忧”。这种人,该快乐时快乐不起来,而有了事情就更是沮丧、悲哀了。





      著名作家张贤亮写过一篇《心安即福地》的文章,我看了很有同感。在这篇文章里,他回忆了自己18岁从北京携老母弱妹来到宁夏,后来年过不惑而孑然一
    身,为省一角钱而步行十五公里去乘车的经历。是的,世事万物即在心,心安了,人也乐了。心不安,即使锦衣玉食、华屋豪车,同样不会快乐。约翰·奈斯比特
    说:“我们必须学会把技术的物质奇迹和人性的精神需求平衡起来。”





      朋友,在当前越来越激烈的竞争中,努力学会在协调好外部环境的同时,注意调理好个人的内心世界。记住:天堂与地狱,就在你心中。



    Powered by ScribeFire.

    2007年1月25日星期四

    面试

    最近参加了西门子的面试,一路过关斩将,已经到了最后一步(和德国总部老板面试),突然心里很平静,没有前两关的那种紧张和兴奋,因为我知道不管最后结果怎么样,我肯定不会去的,呵呵,因为我不希望因为工作而给家庭带来不应有的动荡。

    有时候取舍是很难的,不过就像我以前说的,我不会贪婪的!我只需要一样,对我最重要的一样!