解决VS在设计时无法生成窗体设计器的Controls.Add()代码
解决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
扫一扫加作者微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网