Winform入門


關於winForm開發說明

【1】應用集中性:國內的C#上位機開發,HIS,ERP,MRP,二次開發,GIS等,幾乎都是C#開發的!

【2】學習必要性:是.NET平台和非.NET平台最早出現的,學好C#開發的必備。

1.項目UI設計

【1】C/S項目:首選是Winform原生控件(簡單實用,但效果不太美觀),直接拖放控件

              第三方控件庫:免費的控件庫

              WPF(界面設計上是最漂亮的,但是,學習成本較高)

              自己動手設計UI:自定義控件(局限性:屏幕自適應較差)

【2】B/S項目:HTML5原生設計(CSS+DIV)太麻煩,但是性能非常高!

              jQueryUI,Extjs,EasyUI....

              BootStrap框架(響應式設計,非常流行)

              LayUI框架(學習簡單,上手快,效果好,一般后台應用較多)

2.常見的項目類型

【1】控制台程序(主要是學習使用)

【2】WinForm程序(Window程序,桌面程序,C/S程序,客戶端程序)

【3】Web程序和分布式服務程序(asp.net-webform,asp.net-mvc,webservice,webapi,wcf)

3.不同項目部署差異

【1】Winform程序:我們.NET開發程序,可以直接把生成的文件拷出來就能用了。不需要單獨的安裝包,我們打包程序

                  僅僅是把程序模塊集中到一起而已,對注冊表沒有任何的修改。

                  部署:第一,如果有數據庫,數據庫會在專門的服務器上。

                        第二,應用程序,在獨立的客戶端電腦上。(通常會有多個客戶端)

                        第三,項目升級服務器。

【2】Web程序:我們開發的程序,通常只有一個服務器,通過IIS部署到服務器上,客戶端其實就是瀏覽器。

              部署:第一,數據庫通常是獨立的服務器。

                    第二,應用程序,在獨立的服務器上。

4.Winform程序設計

【1】項目結構

     1.Properties文件夾:AssemblyInfo程序集信息的配置類(通常項目正式發布后,存儲項目版本版權項目相關信息)

     2.窗體文件Form1

       包括:Form1.cs

             Form1.Desinger.cs

兩個類的定義:

public partial class Form1 : Form (雙擊窗體)
    {
        public Form1()
        {
            InitializeComponent();
        }

    }
partial class Form1
{
    //其他內容省略
}
結論:兩個類的類名是完全一樣的。
 

【2】部分類(partial)

當兩個類在同一個命名空間下,類名稱一樣,但是使用partial關鍵字后,就意味着了兩個類看着是兩個類

其實是一個類的不同的部分。

目的:當一個類的內容太多的時候,我們編寫和查找都容易出現不便。為了更好的管理類的代碼,在vs2005

的時候出現了部分類。

public partial class Form1 : Form (雙擊窗體)
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
這個類里面的代碼,主要是我們自己寫的。
下面是Designer文件中的代碼
partial class Form1
{
    //其他內容省略
}
這里面主要是VS自動生成的代碼
好處:可以不同的人編寫的同一類,當然目的是更好的對代碼進行分類管理。最后還能編譯成一個類。
建議:不要輕易添加窗體的部分類。我們開發的一個建議:當我們這個類的內容太多的時候,請大家按照OOP原則
將類的內容再次細分, 封裝到其它類中。

【3】常用控件

按鈕控件:當我們在窗體中添加一個Button后,其實是VS自動的根據Button類幫我們創建一個按鈕對象,並自動

設置了相關屬性。

private System.Windows.Forms.Button button1;這個說明按鈕是窗體對象里面的一個成員變量(對象)。

當我們通過屬性窗口修改完控件的屬性后,后台代碼會自動修改:

 

1this.btnTest.Location = new System.Drawing.Point(84, 60);
2this.btnTest.Name = "btnTest";
3this.btnTest.Size = new System.Drawing.Size(75, 23);
4this.btnTest.TabIndex = 0;
5this.btnTest.Text = "啟動按鈕";
6this.btnTest.UseVisualStyleBackColor = true;

 

 建議:不要隨便的手動從后台修改。但是,我們如果需要動態的創建控件,我們通常會自己先添加一個控件,設置屬性后把這些代碼復制到我們的相關的方法中,通過動態修改屬性,來實現控件的動態控制。

我們在添加一個下拉菜單控件

 1            // Form1
 2            // 
 3             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
 4             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
 5             this.ClientSize = new System.Drawing.Size(800, 450);
 6             this.Controls.Add(this.comboBox1);
 7             this.Controls.Add(this.btnTest);
 8             this.Name = "Form1";
 9             this.Text = "Form1";
10             this.Load += new System.EventHandler(this.Form1_Load);
11             this.ResumeLayout(false);

我們還發現在Form1中窗體的設置多了兩個內容:

this.Controls.Add(this.comboBox1);
this.Controls.Add(this.btnTest);

以上說明,我們窗體本身就是一個容器。窗體上所有的控件,都要添加到Controls集合中。

如果我們在窗體中添加其他的容器,比如panel,groupbox等等,這些首先被添加到Form的Controls集合中。

但是如果我們在panel等這些容器中添加空間的時候,控件會加到他所在的第一級容器中。

啟動窗體

 

 1 static class Program
 2     {
 3         /// <summary>
 4         /// 應用程序的主入口點。
 5         /// </summary>
 6         [STAThread]
 7         static void Main()
 8         {
 9             Application.EnableVisualStyles();
10             Application.SetCompatibleTextRenderingDefault(false);
11             Application.Run(new Form1());
12         }
13     }

 

在這里是程序的入口,我們發現 Application.Run(new Form1());這句話告訴我們Form1窗體是作為項目的啟動窗體

啟動窗體就是意味着項目的主線程運行,當我們關閉Form1窗體的時候,整個項目會退出。我們可以根據需要修改這個啟動窗體。

無邊框窗體設計

 

方法:

1.窗體邊框去掉。然后自己設計“邊框”和顏色。 

2.窗體大小,必須提前設計好。

3.控件要扁平化處理。

 

 Event事件(我們還要學習很多的內容,委托-->事件:高級內容)

在.NET平台上面,給我們所用的這些控件,封裝了很多事件,就是對用戶操作的某一個行為,進行封裝。

比如,當用戶單擊一個按鈕的時候,單擊這個動作,已經被封裝成Click事件,那么我們只要把這個事件拿出來,

當用戶出發單擊這個動作的時候,也就是這個事件被調用了,我們就可以在這個事件中,完成我們需要的任務。

看下面兩行代碼:

this.btnTest.Click += new System.EventHandler(this.btnTest_Click);

private void btnTest_Click(object sender, EventArgs e)
{
}
這兩行代碼是將控件的Click事件和事件方法關聯。只要保證兩個話顏色的代碼指向相同的事件名稱就可以了。
sender:表示當前控件的對象。
this.btnTest.Click -= new System.EventHandler(this.btnTest_Click); //接觸事件關聯
要求學會:
【1】能夠找到我們需要的控件事件。
【2】根據事件生成事件方法,並且編寫業務邏輯。
【3】如果事件不在需要,要知道如何把時間關聯(委托)刪除和時間方法刪除。

【4】窗體的兩個事件,大家無比掌握,並且學會窗體關閉前的確認邏輯是如何處理的。

private void Form1_Load(object sender, EventArgs e)
 {
 }
窗體所有控件和初始化完畢后要執行的事件,我們通常不用。我們想完成控件或初始化內容,請在構造方法中寫。

兩個窗體關閉事件:FormClosing和FormClosed

FormClosing:窗體關閉之前發生的。

FormClosed:窗體關閉之后發生的。

事件的集中響應

原理:就是相同的控件,可以關聯同一個事件響應的方法。

記住以下代碼:

 1         foreach (Control item in this.Controls)
 2         {
 3             if (Item is Button)  //通過控件類型過濾掉我們不需要的控件
 4             {
 5                 Button btn = Item as Button;
 6                 if (btn.Tag.ToString() != "Save")  //過濾我們不需要的按鈕,請大家特別注意Tag的使用
 7                 {
 8                     btn.Click += new System.EventHandler.(this.btn_Click);
 9                 }
10             }
11         } 
12         private void btn_Click(object sender, EventArgs e)
13         {
14             Button btn = sender as Button;
15             MessageBox.Show(btn.Tag.ToString());
16         }

 


免責聲明!

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



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