好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

CS 系统框架二

CS 系统框架二

自己一直想有一个完全属于自己的编程小框架,之前使用的方式是将每一个窗体文件都编译为一个DLL文件,在新建窗体的时候首先新建一个类,然后在这个类
里面新建窗体,编译之后就是一个DLL文件,最后通过一个函数去读取这个DLL文件里面的信息,包括窗体名称,版本等,最后将设个窗体Show出来,Show出来的时候是使用的WeifenLuo.WinFormsUI.Docking。看上去貌似没什么问题,但是每次New一个窗体的时候就要New一个对应的类,那么有几百个窗体呢?那项目将会大的惊人,所以果断弃之,经过一段时间的构思,大致的框架结构出来了,我比较了一下,功能完全相同的两个项目,用之前的方法和我现在的方法相比较,前者的大小是后者大小的13倍。
首先我需要使用DockContent来实现窗体的停靠,其次我需要使用XtraForm的样式风格(IrisSkin2.dll真的是不好用,样式单调不说,应用了样式之后连控件的属性都设置不了了),大家都知道是不能多继承的,所以自己写一个类FrmBase,大致如下:

  1   using   System;
   2   using   System.ComponentModel;
   3   using   System.Drawing;
   4   using   System.Windows.Forms;
   5   using   WeifenLuo.WinFormsUI.Docking;
   6  
  7   namespace   Allen.FrmBase
   8   {
   9       public   class   DockContent : XtraForm, IDockContent
  10       {
  11           public   DockContent();
  12  
 13          [DefaultValue( true  )]
  14          [Category( "  Category_Docking  "  )]
  15          [Description( "  DockContent_AllowEndUserDocking_Description  "  )]
  16           public   bool  AllowEndUserDocking {  get ;  set  ; }
  17          [Category( "  Category_Docking  "  )]
  18          [Description( "  DockContent_AutoHidePortion_Description  "  )]
  19          [DefaultValue( 0.25  )]
  20           public   double  AutoHidePortion {  get ;  set  ; }
  21          [Description( "  DockContent_CloseButton_Description  "  )]
  22          [Category( "  Category_Docking  "  )]
  23          [DefaultValue( true  )]
  24           public   bool  CloseButton {  get ;  set  ; }
  25          [DefaultValue( true  )]
  26          [Description( "  DockContent_CloseButtonVisible_Description  "  )]
  27          [Category( "  Category_Docking  "  )]
  28           public   bool  CloseButtonVisible {  get ;  set  ; }
  29          [Description( "  DockContent_DockAreas_Description  "  )]
  30          [Category( "  Category_Docking  "  )]
  31           public  DockAreas DockAreas {  get ;  set  ; }
  32          [Browsable( false  )]
  33           public  DockContentHandler DockHandler {  get  ; }
  34          [Browsable( false  )]
  35           public  DockPanel DockPanel {  get ;  set  ; }
  36          [Browsable( false  )]
  37           public  DockState DockState {  get ;  set  ; }
  38          [Browsable( false  )]
  39           public  DockPane FloatPane {  get ;  set  ; }
  40          [DefaultValue( false  )]
  41          [Category( "  Category_Docking  "  )]
  42          [Description( "  DockContent_HideOnClose_Description  "  )]
  43           public   bool  HideOnClose {  get ;  set  ; }
  44          [Browsable( false  )]
  45           public   bool  IsActivated {  get  ; }
  46          [Browsable( false  )]
  47           public   bool  IsFloat {  get ;  set  ; }
  48          [Browsable( false  )]
  49           public   bool  IsHidden {  get ;  set  ; }
  50          [Browsable( false  )]
  51           public  DockPane Pane {  get ;  set  ; }
  52          [Browsable( false  )]
  53           public  DockPane PanelPane {  get ;  set  ; }
  54          [Category( "  Category_Docking  "  )]
  55          [Description( "  DockContent_ShowHint_Description  "  )]
  56           public  DockState ShowHint {  get ;  set  ; }
  57          [Category( "  Category_Docking  "  )]
  58          [Description( "  DockContent_TabPageContextMenu_Description  "  )]
  59          [DefaultValue( ""  )]
  60           public  ContextMenu TabPageContextMenu {  get ;  set  ; }
  61          [DefaultValue( ""  )]
  62          [Category( "  Category_Docking  "  )]
  63          [Description( "  DockContent_TabPageContextMenuStrip_Description  "  )]
  64           public  ContextMenuStrip TabPageContextMenuStrip {  get ;  set  ; }
  65           public   string  TabText {  get ;  set  ; }
  66          [Description( "  DockContent_ToolTipText_Description  "  )]
  67          [Localizable( true  )]
  68          [Category( "  Appearance  "  )]
  69          [DefaultValue( ""  )]
  70           public   string  ToolTipText {  get ;  set  ; }
  71          [Browsable( false  )]
  72           public  DockState VisibleState {  get ;  set  ; }
  73  
 74          [Description( "  Pane_DockStateChanged_Description  "  )]
  75          [Category( "  Category_PropertyChanged  "  )]
  76           public   event   EventHandler DockStateChanged;
  77  
 78           public   void   Activate();
  79           public   void   DockTo(DockPanel panel, DockStyle dockStyle);
  80           public   void  DockTo(DockPane paneTo, DockStyle dockStyle,  int   contentIndex);
  81           public   void   FloatAt(Rectangle floatWindowBounds);
  82           protected   virtual   string   GetPersistString();
  83           public   void   Hide();
  84           public   bool   IsDockStateValid(DockState dockState);
  85           protected   virtual   void   OnDockStateChanged(EventArgs e);
  86           public   void   Show();
  87           public   void   Show(DockPanel dockPanel);
  88           public   void   Show(DockPane pane, IDockContent beforeContent);
  89           public   void   Show(DockPanel dockPanel, DockState dockState);
  90           public   void   Show(DockPanel dockPanel, Rectangle floatWindowBounds);
  91           public   void  Show(DockPane previousPane, DockAlignment alignment,  double   proportion);
  92       }
  93  }

然后在每一个窗体文件里面都继承这个基类:
 public partial class FrmMain : Allen.FrmBase.DockContent
关键代码如下图所示:


以后如果做一些小型项目的话直接套用这个框架即可,只需要往里面增加窗体即可,在数据库里面保存一下对应的路径,前台便可以使用了,所有的数据操作都是用存储过程,如果数据有 异常只需要修改存储过程,不需要对客户端的程序进行修改再发布,维护起来方便很多。

 

分类:  C# ,  WinForm

标签:  WinForm ,  框架

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于CS 系统框架二的详细内容...

  阅读:55次