• 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 里修改

  • 相关阅读:
    k8s记录-helm部署(九)
    k8s记录-master组件部署(八)
    Hadoop记录-Apache hadoop+spark集群部署
    k8s记录-ubuntu安装docker
    Nginx记录-Proxy_pass多个应用配置(转载)
    Java动态调用脚本语言Groovy
    05 吸收应用-会整理还不够?教你吸收、联想、输出、应用
    02 超级搜索术——资源搜索:全面、快速查找全网你想要的任何信息、情报
    01 超级搜索术——信息搜索:全面、快速查找全网你想要的任何信息、情报
    长赢指数基金投资计划-201807(一补仓)
  • 原文地址:https://www.cnblogs.com/likehc/p/6729564.html
Copyright © 2020-2023  润新知