解决VS在设计时无法生成窗体设计器的Controls.Add()代码
在写《设计时在窗体设计器文件内生成组件的代码》一文时遇到问题,当第一次拖CSFrameworkComponent组件到窗体上,右键菜单新增一个按钮,这时查看XXX.Designer.cs文件可以看到button1的相关代码,但是在Form代码段内没有看到this.Controls.Add(button1); 没有这行代码后果很严重!!! 意味着下次打开窗体按钮组件不会在窗体上呈现!
《设计时在窗体设计器文件内生成组件的代码》
http://www.csframework.com/archive/2/arc-2-20110826-1804.htm
摸着石头过河是痛苦的,只能求助google, 哎,终于在codeproject找到一文里面有相关介绍:
http://www.codeproject.com/KB/cs/collcontrolsrichdes.aspx
如果要生成Controls.Add代码,必须使用IComponentChangeService组件改变服务通知主窗体正在更改组件。
代码如下:
C# Code:
c.OnComponentChanging(form, null);//通知窗体正在新增控件服务
form.Controls.Add(button);//Form.Controls.Add, 生成持久化代码
c.OnComponentChanged(form, null, null, null);//通知窗体修改服务已完成
c.OnComponentChanging(form, null);//通知窗体正在新增控件服务
form.Controls.Add(button);//Form.Controls.Add, 生成持久化代码
c.OnComponentChanged(form, null, null, null);//通知窗体修改服务已完成
完整代码:
C# Code:
private void OnGenerateButtonCode(object sender, EventArgs e)
{
//
//在窗体上加入一个Button组件,host.RootComponent=Form
//
//取出窗体设计器
IDesignerHost host = (IDesignerHost)this.GetService(typeof(IDesignerHost));
IComponentChangeService c = (IComponentChangeService)this.GetService(typeof(IComponentChangeService));
Form form = (Form)host.RootComponent;//RootComponent: 根组件,指Form
DesignerTransaction tran = host.CreateTransaction();//创建事务
//创建按钮组件
Button button = (Button)host.CreateComponent(typeof(Button));
button.Text = "www.CSFramework.com";
button.Location = new Point(50, 50);
button.Size = new Size(150, 30);
c.OnComponentChanging(form, null);//通知窗体正在新增控件服务
form.Controls.Add(button);//Form.Controls.Add, 生成持久化代码
c.OnComponentChanged(form, null, null, null);//通知窗体修改服务已完成
tran.Commit();//提交事务
MessageBox.Show("已生成" button.Name "的代码!请打开frmTester.Designer.cs文件查看.");
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
private void OnGenerateButtonCode(object sender, EventArgs e)
{
//
//在窗体上加入一个Button组件,host.RootComponent=Form
//
//取出窗体设计器
IDesignerHost host = (IDesignerHost)this.GetService(typeof(IDesignerHost));
IComponentChangeService c = (IComponentChangeService)this.GetService(typeof(IComponentChangeService));
Form form = (Form)host.RootComponent;//RootComponent: 根组件,指Form
DesignerTransaction tran = host.CreateTransaction();//创建事务
//创建按钮组件
Button button = (Button)host.CreateComponent(typeof(Button));
button.Text = "www.CSFramework.com";
button.Location = new Point(50, 50);
button.Size = new Size(150, 30);
c.OnComponentChanging(form, null);//通知窗体正在新增控件服务
form.Controls.Add(button);//Form.Controls.Add, 生成持久化代码
c.OnComponentChanged(form, null, null, null);//通知窗体修改服务已完成
tran.Commit();//提交事务
MessageBox.Show("已生成" button.Name "的代码!请打开frmTester.Designer.cs文件查看.");
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898

参考文档:
代码生成器:直连模式+WebApi生成的源码集成到VS解决方案|C/S开发框架
生成的项目模块(Project)添加到VS解决方案 - C/S框架三层架构代码生成器操作指南
生成的窗体Form源码集成到VS解决方案 - C/S框架三层架构代码生成器操作指南
CSFramework.CodeGeneratorV6.0|将项目模块(Project)添加到VS解决方案|C/S开发框架
CSFramework.CodeGeneratorV6.0|将窗体(Form)源码加入到VS解决方案|C/S开发框架
VS2022不能打开窗体设计器解决方案(无法设计窗体)|C/S开发框架
VS2022+.NET7:从其他项目复制Form.cs窗体文件无法打开设计器(解决方案)
GitBlit - 使用克隆仓库方式创建、推送VS解决方案源码添加到版本库-C/S开发框架
GitBlit - 创建、推送VS解决方案源码添加到版本库-C/S开发框架
vs2019 调试IIS服务器代码-C/S开发框架
WCF开发环境客户端调试服务端跟踪代码不能命中断点解决方案
VS运行调试:当前无法命中断点,还没有为该文档加载任何符号|解决方案
CSFramework快速开发框架项目改名VS解决方案改名(使用Rename改名工具)
VS编译生成解决方案失败,但是检查源码完全正常的奇异现象
VS调试C#程序,修改代码出错:不允许对64位应用程序进行修改
VS2022编译解决方案为什么会生成2级Debug子目录|C/S开发框架
代码生成器:直连模式+WebApi生成的源码集成到VS解决方案|C/S开发框架
生成的项目模块(Project)添加到VS解决方案 - C/S框架三层架构代码生成器操作指南
生成的窗体Form源码集成到VS解决方案 - C/S框架三层架构代码生成器操作指南
CSFramework.CodeGeneratorV6.0|将项目模块(Project)添加到VS解决方案|C/S开发框架
CSFramework.CodeGeneratorV6.0|将窗体(Form)源码加入到VS解决方案|C/S开发框架
VS2022不能打开窗体设计器解决方案(无法设计窗体)|C/S开发框架
VS2022+.NET7:从其他项目复制Form.cs窗体文件无法打开设计器(解决方案)
GitBlit - 使用克隆仓库方式创建、推送VS解决方案源码添加到版本库-C/S开发框架
GitBlit - 创建、推送VS解决方案源码添加到版本库-C/S开发框架
vs2019 调试IIS服务器代码-C/S开发框架
WCF开发环境客户端调试服务端跟踪代码不能命中断点解决方案
VS运行调试:当前无法命中断点,还没有为该文档加载任何符号|解决方案
CSFramework快速开发框架项目改名VS解决方案改名(使用Rename改名工具)
VS编译生成解决方案失败,但是检查源码完全正常的奇异现象
VS调试C#程序,修改代码出错:不允许对64位应用程序进行修改
VS2022编译解决方案为什么会生成2级Debug子目录|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
