目前一个办公系统(WinForm)需要自定义表单设计功能,能够由后台维护人员设计好表单(具体就是像在VS2005中的窗体设计器中拖拉控件进行窗体排版,主要涉及Label TextBox ComboBox CheckBox GridView等),然后将控件排版信息保存到数据库,办公系统读取配置将设计好的表单显示出来,由用户输入信息或其他操作。本人准备开发这个表单设计模块,遇到如下几个问题:1、本人采用动态加载控件来产生表单设计中的控件,但是像TextBox ComboBox等控件拖放到窗体以后会自动获取焦点,而且其中的文本能够被编辑,且其中的光标为输入状态IBeam,如何使用户不能在控件中输入数据,且改变光标为SizeALL
2、控件拖放到窗体以后,如何模拟在VS2005设计器中的式样,使控件周围产生若干个小方格,和一个拖拉手柄,设计人员可以拖动控件或者改变控件大小,是否需要重写 Control_Paint 事件?
2、控件拖放到窗体以后,如何模拟在VS2005设计器中的式样,使控件周围产生若干个小方格,和一个拖拉手柄,设计人员可以拖动控件或者改变控件大小,是否需要重写 Control_Paint 事件?
但是如果我希望表单设计的容易不是Form,而是Panel控件,似乎会有一点问题DesignSurface surface = new DesignSurface();
surface.BeginLoad(typeof(Panel));
此处如果是Form,可以正常显示控件,如果是Panel,则只会显示加载控件的图标
这个问题如何解决,难道不能用Panel作为宿主?Control designView = surface.View as Control;
designView.Parent = this.panelControl1 ;
designView.Dock = DockStyle.Fill;
designView.BackColor = Color.White;
你可以在 Form parentForm = new Form();时,设置parentForm .FormBorderStyle= FormBorderStyle.None;DesignSurface surface = new DesignSurface();
surface.BeginLoad(typeof(Form));
Control ctrl = surface.View is Control;
Form parentForm = new Form();
parentForm .FormBorderStyle= FormBorderStyle.None;
ctrl .Parent = parentForm;
ctrl.Dock = DockStyle.Fill;
parentForm.Show();
frmDesignHost,这个窗体是没有标题栏的:
DesignSurface surface = new DesignSurface();
surface.BeginLoad(typeof(frmDesignHost));
Control designView = surface.View as Control; designView.Parent = this.pnlTable ;
designView.Dock = DockStyle.Fill;
designView.BackColor = Color.White;
这样以后宿主窗体确实能显示在pnlTable控件内,但是不能随着Table窗体一起缩放
DesignSurface surface = new DesignSurface();
surface.BeginLoad(typeof(frmDesignHost));
designView = surface.View as Control;designView.Parent = this.pnlTable ;
designView.Dock = DockStyle.Fill;
designView.BackColor = Color.White;
IDesignerHost host = (IDesignerHost)surface.GetService(typeof(IDesignerHost));
Control root = (Control)host.RootComponent;designView.MouseDown += new MouseEventHandler(designView_MouseDown);
designView.MouseMove += new MouseEventHandler(designView_MouseMove);
designView.MouseUp += new MouseEventHandler(designView_MouseUp);
希望能够响应用户鼠标事件,但是毫无反应?
我希望能够由用户选择需要添加的控件(自己设计的工具栏按钮),然后在设计器上拖动鼠标,鼠标弹起的时候添加这个控件,要怎么写这些事件?