本文作者注:这个方案并不是我想出来的,我只是造轮子。感谢原作者!好东西还是要拿出来的分享的!
在很多项目里面,因为客户需求不断的变化,程序也不得不断的修改,对于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. 保留(待后补充)
在很多项目里面,因为客户需求不断的变化,程序也不得不断的修改,对于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. 保留(待后补充)
解决方案 »
- |ZYCWPF| 用户自定义控件如何实现VMMV,为什么我注册的4个属性,两个有效,两个无效 谢谢 有源码示例
- 打开外部程序后怎么让程序边框不显示
- c# 调用COM 的 参数为unsinged char* 的函数
- 让文字竖着显示
- DataList1控件可以指定要显示的数据吗
- 请问哪有issuevision下载
- 不知道如何处理这个异常
- 这么晚了 发个问题 HttpWebRequest超时的问题!
- Published an open source project --- ExcelQuicker 2.2
- 散分ing~请教:我做IT教师还程序员??
- c#点对点聊天程序
- C# OLEDB 读取EXCEL的奇怪问题~~数字读不出来。。。。。。??
想法不错。对于小范围的界面调整倒是可以,大的变动就麻烦了。
可以参考:DesignerHosting,这种方式一样可以处理
参考一下BLOG