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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM