日期:2014-05-18  浏览次数:20913 次

关于自定义表单设计控件的几个问题
目前一个办公系统(WinForm)需要自定义表单设计功能,能够由后台维护人员设计好表单(具体就是像在VS2005中的窗体设计器中拖拉控件进行窗体排版,主要涉及Label TextBox ComboBox CheckBox GridView等),然后将控件排版信息保存到数据库,办公系统读取配置将设计好的表单显示出来,由用户输入信息或其他操作。本人准备开发这个表单设计模块,遇到如下几个问题:

1、本人采用动态加载控件来产生表单设计中的控件,但是像TextBox ComboBox等控件拖放到窗体以后会自动获取焦点,而且其中的文本能够被编辑,且其中的光标为输入状态IBeam,如何使用户不能在控件中输入数据,且改变光标为SizeALL
2、控件拖放到窗体以后,如何模拟在VS2005设计器中的式样,使控件周围产生若干个小方格,和一个拖拉手柄,设计人员可以拖动控件或者改变控件大小,是否需要重写 Control_Paint 事件?

------解决方案--------------------
顶,太难了,我看只能通过设置属的方法来做了,要不然就自己做图片来代替那些控件
------解决方案--------------------
恩。需要重写把
------解决方案--------------------
你可以研究一下VS.IDE,VS的WinForm设计类应该是公开的.我记得以前看到一个程序完全类似于VS WinForm 设计器, 找到后继承它应该就可以了.
------解决方案--------------------
我的建议是直接用sharepoint吧,有现成滴干吗不用呢?

自己写的话,需要研究IDesignerHost接口,DesignSurface对象

恩,微软好像有个demo自定义窗体设计器的demo你可以找一下
------解决方案--------------------
探讨
看了一下DesignSurface,似乎可以产生一个跟设计器差不多的窗体
但是如果我希望表单设计的容易不是Form,而是Panel控件,似乎会有一点问题

DesignSurface surface = new DesignSurface();
surface.BeginLoad(typeof(Panel));
此处如果是Form,可以正常显示控件,如果是Panel,则只会显示加载控件的图标
这个问题如何解决,难道不能用Panel作为宿主?

Control designView = surface.View as Control;
designView.Paren…