winform代码生成器(一)

(PS  sqlhelper的文件 竟放到 类库里了,第二篇已做了分离,边做边写的 ^_^)

做 Winform  项目时,要拖很多控件,感觉在做重复的事,那就应该用程序来完成,那就自己写一个吧.--人懒就得多”干活” ,

 

代码下载 地址 http://pan.baidu.com/s/1nuZjyat

 控件的类型 ,及名称,我们要从数据库获取. 下面是 要用到 Sql语句

SELECT * FROM Master..SysDatabases ORDER BY Name --获取数据库信息(本文指定了数据库,所以此条不用,但可用扩展)

SELECT Name FROM SysObjects Where XType='U' ORDER BY Name --获取用户创建的表名

Select Name from syscolumns Where ID=OBJECT_ID('表名') --获取字段名

SELECT T1.COLUMN_NAME,T1.DATA_TYPE,T2.value From fn_listextendedproperty  (NULL, 'schema', 'dbo', 'table', '表名', 'column', default) T2
Right Join information_schema.columns  as T1  on T1.COLUMN_NAME = t2.objname COLLATE Chinese_PRC_CI_AS
where T1.TABLE_NAME='表名'  --查询字段类型及说明

(下面是可能出现的错误 及解决方案)
--获取字段说明(fn_listextendedproperty不提供参数)
--无法解决 equal to 运算中 "Latin1_General_CI_AI" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。
--哪个表不是Chinese_PRC_CI_AS排序 加上 COLLATE Chinese_PRC_CI_AS

 

 

本章 来说说 简单的 窗体控件生成.

创建一个 窗体会生成两个文件,如果这个窗体引用了其他的 资源就会有3个

这里创建的 窗体名为Generator_Simple 所以会生成以下文件

Generator_Simple.cs   //窗体上的方法代码都写在此文件内

Generator_Simple.Designer.cs   //窗体设计代码(系统生成),控件绑定方法也写在此文件

Generator_Simple.resx  //资源文件如ico文件(如果没引用此文件可以不要)

 

好,我们往往 Generator_Simple 窗体上拖一个 button 控件,看看Generator_Simple.Designer.cs 有什么 变化,

 

 

 

比较 代码,可以知道 ,新建一个 button 控件, Generator_Simple.Designer.cs 有4个地方出现了变化.

 

//创建 button1 对象 

private System.Windows.Forms.Button button1;

 

//实例化button1 对象

this.button1 = new System.Windows.Forms.Button(); 

 

//设置 button1 的基本属性

this.button1.Location = new System.Drawing.Point(37, 42);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(75, 23);

this.button1.TabIndex = 0;

this.button1.Text = "button1";

this.button1.UseVisualStyleBackColor = true;

 

//把 button1绘制 到窗体

this.Controls.Add(this.button1); 

 

 

先在窗体上 创建一个 按钮试试

 1 private void btn_Test_Click(object sender, EventArgs e)
 2 {
 3     Button btn = new Button();
 4     btn.AutoSize = true;
 5     btn.Location = new System.Drawing.Point(10,20); //X,Y
 6     btn.Text = "新增按钮";
 7     btn.Click += new System.EventHandler(SayHello);
 8     btn.Size = new System.Drawing.Size(75, 23); // width, height
 9     this.Controls.Add(btn);
10 
11 }
12 private void SayHello(object sender, EventArgs e)
13 {
14     MessageBox.Show("Hello World!");
15 }

 

 

 

 

 

其他控件也按这种方法,就知道怎么的绘制了.

读取 数据库,然后

先创建一个简单的 从数据库 读取数遍,在窗体上 创建控件

 

说下 程序的 架构

WinformGenerator(类库文件,生成器主要代码都在这)

         IBase(每个空间都有一个接口,用于实现不同属性的设置)

                   ILable.cs(Label控件接口)

                   ITextBox.cs(TextBox控件接口)

         Base(控件的基本属性,此处是模板)

                   BaseControl.cs(基础模板的属性,如名称,位置,大小)

         Control(对Ibase接口的实现,就是创建控件代码)

                   GetLabel.cs(创建Label控件代码)

                   GetTextBox.cs(创建TextBox控件代码)

         Forms(窗体模板,)  //一共讲创建3种窗体,本文讲最简单的

                   SimpleForm.cs(简单窗体)//本文只讲了 Label,TextBox,DateTimePicker 三种控件

                  

         Static(静态文件)

                   WinFormPars.cs(存放静态变量的,如sql连接字符,读取web.config里的value)

                   WinInfo.cs(存放静态变量,记录窗体生成的信息,如控件位置,判断是否换行)

         SqlHelper.cs (读取数据库的,)

        

 

WinformGenerator_Simple(winForm主体,要引用WinformGenerator 类库)

 

 

 

 

筛选表名

var result = tabAll.Where(q => q.Contains(txt_TabName.Text.Trim())).ToArray();

           

我把每个 控件必须的 属性 抽离到一个类中,里面有个方法 用于 判断控件是否换行,在 实现接口创建控件时, 可额外加入其他属性

简单的窗体 创建 控件 如下图片

我生在成的窗体名 是QQ ,拖入 项目, 然后show 一下.

private void btn_Test_Click(object sender, EventArgs e)

{

   QQ win = new QQ();

   win.ShowDialog();

}

 

 

 

这篇就讲到这些吧

PS

WinFormPars.cs  从app.config 的 appSettings读取数据

TimeFormat  用于 设置 时间格式,代码中 用到格式化时间,可以这统一设置

Details  窗体上选中表名,会加上 Details 的值,就是从表名, 如果想换成其他 字符,可在app.config 里修改

posted @ 2017-04-18 19:41  likehc  阅读(4510)  评论(6编辑  收藏  举报