本文作者注:这个方案并不是我想出来的,我只是造轮子。感谢原作者!好东西还是要拿出来的分享的!
       在很多项目里面,因为客户需求不断的变化,程序也不得不断的修改,对于Winform项目而言,修改意味着什么?回想普通Winform程序,界面要修改?简单,打开VS修改界面编译程序发布不就OK了?但是,如果你的最终用户很多分布在不同的部门,不同的部门处在不同的地方,这个发布所带来的成本就越来越大了。自动更新(其它文章中再介绍我在用的一套方案)是一个不错的方案,但有没有比这个更好?答案是有的。
       界面设计器只是这种类似方案的其中一个,其它不说先上实际项目中的图:图1生成效果图2设计时效果
原理解释:
       其实不用多说了比较简单的原理,
1.  设计时保存控件 类型、位置、大小的XML描述;
2.  在界面产生时读取XML,判断类型创建控件,把位置、大小等代码类似如:
            switch (ctrl.CtrlKind)
            {
                case EditCtrlKind.Label:
                    Label lbl = new Label();
                    lbl.Text = ctrl.Text;
                    lbl.Bounds = bounds;
                    lbl.BorderStyle = borderStyle;
                    break;
                case EditCtrlKind.TextBox:
                    TextBox txtBox = new TextBox();
                    txtBox.Bounds = bounds;
                    txtBox.BorderStyle = borderStyle;
                    break;
        }
 
3.  保留(待后补充)

解决方案 »

  1.   

    恩,可以把全文放在你的blog里
      

  2.   

    楼主的意思是界面的控件由配置文件产生,更新版本只要传递并覆盖配置文件就可以,而不用更新dll或exe文件。
    想法不错。对于小范围的界面调整倒是可以,大的变动就麻烦了。
      

  3.   

    姑且不考虑XML文件的大小,你的画面布局在没有可视化的情况下,单凭文本模式就能搞定?这种想法微软早就想到了,form.designer.cs就是例子,这种做法最终还是被微软抛弃了(winform的绝对定位 ——> winform的绝对定位+ Layout相对定位 ——> wpf的完全相对定位)
      

  4.   

    我在上一家做过类似的东西  不过是个打印运输单的东西 运输单有多个textbox,而且每个公司的区别很大 当时就想出了这个方法,由用户在一块面板上取拖曳文本框范围和大小以及位置 然后保存参数记录数据库 每次加载的时候就读取参数 支持楼主
      

  5.   


    可以参考:DesignerHosting,这种方式一样可以处理
      

  6.   

    LZ大牛讲课,搬个板凳好好听,最近正在疯狂学习C# winform编程,咔咔!
      

  7.   

    真没想到没人提总是...
    参考一下BLOG
      

  8.   

    15楼有提问题,如果业务逻辑实现不是远程的(如:WebService),而是dll或exe方式?如何处理?